Освобождение ивара со свойством Copy - PullRequest
0 голосов
/ 18 июля 2010

Если у меня есть класс

@interface Foo {
    NSString *temp;
}

@property(nonatomic, copy) NSString *temp;

@end

Я понимаю, что при назначении старый темп будет освобожден, а новый будет назначен с помощью temp = [newTemp copy]. И, следуя правилам управления памятью, вы должны делать [temp release] в методе dealloc Foo, верно?

Что я не понимаю, так это то, что происходит, если сеттер никогда не использовался - у вас все еще есть [temp release] в диллоке, поэтому он выпускает что-то с счетом сохранения 0. Может кто-нибудь объяснить это мне? *

1 Ответ

3 голосов
/ 18 июля 2010

Есть две возможности.

  1. Так как вы никогда не устанавливаете его, это nil. Отправка release на nil - это нормально. Так что никаких проблем нет.

  2. Ваша подпрограмма init устанавливает значение по умолчанию для temp. Тогда это реальный объект, и отправка его release тоже нормально.

Нет проблем вокруг! Ни в том, ни в другом случае вы не отправляете сообщение объекту с счетом сохранения 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...