Выпуск iVar IBOutlet против Property IBOutlet

#iphone #objective-c #cocoa-touch #memory-management #memory-leaks

#iPhone #objective-c #cocoa-touch #управление памятью #утечки памяти

Вопрос:

Кто-нибудь может проверить правильность моего метода освобождения? Поскольку мои titleLabel и checkImageView сохранены, я выпускаю их в режиме dealloc. Однако я не выпускаю mainImageView, doneButton и noteLabel, потому что они не сохраняются или не распределяются во время реализации.

 @interface CheckMarkController : UIViewController  <UIAlertViewDelegate> {
IBOutlet UIImageView *mainImageView;
IBOutlet UIButton *doneButton;
IBOutlet UILabel *noteLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *titleLabel;
@property (nonatomic, retain) IBOutlet UIImageView *checkImageView;
@property (nonatomic, retain) Event *event;
@property (nonatomic, retain) Workout *workout;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

@end

- (void)dealloc {
//props
[titleLabel release];
[checkImageView release];
[event release];
[workout release];
[managedObjectContext release];

[super dealloc];
  

Ответ №1:

Если вы подключаете эти три элемента через Interface Builder, вам действительно нужно их выпустить. По умолчанию сохраняются торговые точки. KVC (кодирование значения ключа) используется для настройки выходов. Это означает, что loadFromNib будет вызываться setValue:withKey для каждого установленного вами выхода. При этом используется @property и его метод setter, но если ни один из них не установлен (как в вашем случае), объект сохраняется по умолчанию.

Комментарии:

1. Понятно, нормально ли, что эти утечки не отображаются в инструментах?

2. Отредактировано для предоставления более подробной информации. По моему опыту, у инструментов есть проблемы с KVC. Хотя у кого-то другого может быть лучшее представление.

3. Спасибо, Марк. Я исправил код и добавил это в свой список «ошибок»