Нужен ли релиз? Не все
свойства уже обработаны
автоматически
Если собственность сохранена, освобождение необходимо. Когда вы объявляете @property
и @synthesize
, все, что вы получаете - это методы доступа, в dealloc нет специального автоматического поведения.
Кроме того, в IBOutlet нет ничего волшебного - это всего лишь маркер для Interface Builder, чтобы увидеть, какие свойства вы хотели бы видеть в IB. Это просто пустой макрос, Cmd-клик по ключевому слову IBOutlet, чтобы увидеть его определение:
#ifndef IBOutlet
#define IBOutlet
#endif
То же самое относится и к IBAction, который расширяется до void
.
Как я могу проверить количество ссылок, чтобы увидеть
что происходит, для отладки
цели ...
Когда мне нужно отладить управление памятью, я обычно просто устанавливаю точку останова в методе dealloc или записываю туда строку. Также полезно регистрировать retainCount
объекта вокруг вызовов, которые могут сделать что-то подозрительное.
Может также помочь увидеть, как директива @synthesize
создает методы доступа. Когда вы объявляете оставшиеся @property
и просите компилятор @synthesize
их, вы получаете что-то вроде этого:
@property(retain) NSString *foo;
@synthesize foo;
- (void) foo {
return foo;
}
- (void) setFoo: (NSString*) newFoo {
// Try to think what would happen if this condition wasn’t
// here and somebody called [anObject setFoo:anObject.foo].
if (newFoo == foo)
return;
[foo release];
foo = [newFoo retain];
}
Это не совсем то, но это достаточно близко. Теперь должно быть более понятно, почему вы должны выпускать в dealloc.