Я установил в моей interface.h свойство какДолжен ли я освободить неиспользованный ivar?
@porperty(nonatomic, retain) *foo;
Если я не использую этот Ивар в моей реализации я должен выпустить его в dealloc?
Я установил в моей interface.h свойство какДолжен ли я освободить неиспользованный ivar?
@porperty(nonatomic, retain) *foo;
Если я не использую этот Ивар в моей реализации я должен выпустить его в dealloc?
Да:
- (void)dealloc
{
// Other release code
[_foo release];
[super dealloc];
}
EDIT: Благодаря @borrrden за отзыв о избегая сеттеров во dealloc
.
Не рекомендуется использовать «self» в методе dealloc (для возможных проблем с KVO), а вместо этого просто выпустить (и нуль, если хотите) опорную переменную. – borrrden
@borrrden Можете ли вы предоставить источник этой рекомендации. Я понимаю, что вы позволяете сеттеру выполнять эту работу за вас, а это значит, что ее нужно вызвать с помощью 'self'. – trojanfoe
@trojanfoe [Есть проблемы с использованием self.property = nil in dealloc?] (Http://stackoverflow.com/questions/5621139/is-there-any-problem-using-self-property-nil-in-dealloc), просто взгляните.(его новая информация для меня тоже) –
да вы должны выпустить
для выпуска вы можете написать так:
- (void)dealloc
{
// other release stuff
if(foo != nil)
{
[foo release];
foo = nil;
}
[super dealloc];
}
Тест на ноль не нужен. Вы можете безопасно отправить «release» на нулевой объект. –
Если он забыл сделать это nil, то условие (foo! = Nil) будет истинным, и foo (обвисший указатель) будет выпущен в любом случае, что приведет к сбою. Это не поможет в случае, о котором вы упомянули. –
да мужчина ваш правый. Я хочу выпустить, если объект еще не выпущен. –
Да, вы должны - что-то за пределами объекта, возможно, установить его на какой-либо объект. – 2013-05-14 07:36:27
Вы должны использовать ARC в своих проектах лучше в управлении памятью –
@AhmedZ. нет, это не лучше. – justin