Неиспользованные IBOutlets подтекают - PullRequest
2 голосов
/ 20 июля 2010

Итак, я загружаю файл XIB, и он содержит набор UIBarButtonItems. Некоторые из предметов используются, когда вызывается viewDidLoad:.

@interface MyViewController : UIViewController  {

  IBOutlet UIBarButtonItem *addButton;
  IBOutlet UIBarButtonItem *editButton;
  IBOutlet UIBarButtonItem *doneButton;
}

// NB: There are no properties retaining anything.

@end

@implementation MyViewController

- (void)viewDidLoad {

  [super viewDidLoad];

  NSArray *initialToolbarItems = 
    [[NSArray alloc] initWithObjects: addButton, editButton, nil];

  self.toolbarItems = initialToolbarItems;
  [initialToolbarItems release];
}

- (void)dealloc {
  [super dealloc];

  // Nothing else to do here since we are not retaining anything.
  // … or are we? <insert dramatic music here>
}

@end

Если я помещаю вышеупомянутый ViewController в UINavigationController, все выглядит нормально, все IBOutlets назначаются и ведут себя, как и ожидалось.

В тот момент, когда я вытаскиваю ViewController из стека навигации Утечки инструментов говорят мне, что я пропускаю UIBarButtonItem. Горе мне!

Если я изменю dealloc: на

- (void)dealloc {
  [doneButton release];
  [super dealloc];
}

утечки не происходит. То же самое происходит, если я использую doneButton в viewDidLoad:

  NSArray *initialToolbarItems = 
    [[NSArray alloc] initWithObjects: addButton, editButton, doneButton, nil];

Мой вопрос: почему мои IBOutlet протекают, когда я им не пользуюсь. Я не сохраняю это в любой момент. Загрузчик NIB должен владеть объектом, верно?

Ответы [ 3 ]

2 голосов
/ 20 июля 2010

Единственное, о чем я могу думать:

Загрузчик пера рассматривает IBOutlets как сильные ссылки.Все торговые точки сохраняются по умолчанию, если вы не укажете «назначить».Поэтому вам по-прежнему необходимо освободить их в dealloc и viewDidUnload.

Вы также можете использовать назначенное свойство, чтобы сделать его слабой ссылкой:

@property (nonatomic, assign) IBOutlet UIBarButtonItem *doneButton;

Некоторое чтение: http://weblog.bignerdranch.com/?p=95

0 голосов
/ 20 июля 2010

Массив сохраняет их

0 голосов
/ 20 июля 2010

Если у вас есть @property с (retain), заявленным для ваших IBOOutlets, они будут сохранены и должны быть освобождены

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