2011-08-25 1 views
3

Философский вопрос, своего рода. Правильно ли назначать константную строку для @property, которая (сохраняется)? Или, должен ли я делать self.string = [NSString stringWithString:@""];Назначает self.string = @ "" на @property, который (сохраняет) 'd правильный?

Есть ли утечка памяти? Что делать, если он переименован?

Это постоянная строка, поэтому она ведет себя так же, как объект NSString?

Если свойство (присваивание) означает, что это не будет действовать после цикла запуска?

ответ

6

Да, это нормально. Независимо от того, каким образом вы это сделаете, постоянная строка будет по-прежнему компилироваться в вашу программу (потому что вы все равно должны использовать ее в [NSString stringWithString:@""]). Константные строки фактически не сохраняются/освобождаются, но важна семантика этого: вы назначаете строку (у которой есть сеть +0 saveCount, насколько вам известно - у вас нет alloc ed it , поэтому вы не владеете им) к собственности, которая будет владеть ею. Если свойство равно (assign), оно может по-прежнему работать с постоянной строкой, но оно будет семантически недействительным после истощения пула авторезистов.

+1

Согласен. И никогда не бывает веской причины для '[NSString stringWithString: @" ... "]' любого типа. Это просто пустая трата циклов, чтобы ничего не добиться. –

+1

@ Rob Napier: единственная причина для его использования - когда у вас есть изменяемая строка. Это как +0 альтернатива '-copy'. – jtbandes

+0

Я думаю, что Роб означал, что никогда не будет причины передавать _literal_ в 'stringWithString:'. –