Потому что, когда у вас слабое свойство, ARC не увеличивает счетчик ссылок ...
Поэтому, когда вы пишете:
self.myString = [[NSString alloc] init];
ARC добавляет release
сразу после,потому что это то же самое, что и запись:
[[NSString alloc] init];
Основное отличие от @""
состоит в том, что это статическая строка, в некотором смысле сохраненная в другом месте ...
Каждый раз, когда выиспользуйте @""
, это указывает на тот же объект.
Редактировать : Разница между @""
и [[NSString alloc] initWithString:@""]
состоит в том, что первый является статической строкой иобрабатывается во время компиляции.Если он используется в другом месте, другое использование будет указывать на ту же статическую строку.Второе, обрабатывается во время выполнения.Он действительно создает новый объект с его счетом сохранения и т. Д. Вот почему ARC выполняет свою работу для созданного экземпляра (вы конкретно называете alloc
) и почему он не заботится о статических строках.