Инициализация переменной экземпляра другого класса и управление памятью - PullRequest
0 голосов
/ 06 июня 2011

Привет всем, это то, о чем я задумался некоторое время и так и не понял.Если я выделю и инициализирую переменную / свойство экземпляра другого класса (пример ниже), я отвечаю за его освобождение?

В Foo у меня есть экземпляр Bar (называемый bar) и я хочу инициализировать одну из переменных Bar следующим образом:

self.bar.variable1 = [[UIBarButtonItem alloc] initWithCustomView:customView];

Ответы [ 4 ]

4 голосов
/ 06 июня 2011

Foo отвечает за освобождение UIBarButtonItem, который он создает, потому что Foo владеет им. Это можно сделать, просто отправив сообщение autorelease на UIBarButtonItem. В противном случае это будет утечка.

self.bar.variable1 = [[[UIBarButtonItem alloc] initWithCustomView:customView] autorelease];

Если Бар должен держать variable1, он должен претендовать на владение UIBarButtonItem. Бар отвечает за сохранение (и последующее освобождение в будущем) самого UIBarButtonItem.

1 голос
/ 06 июня 2011

Может быть, это облегчит вам понимание.

UIBarButtonItem * buttonItem = [[UIBarButtonItem alloc] initWithCustomView:customView]
self.bar.variable1 = buttonItem;
[buttonItem release];
1 голос
/ 06 июня 2011

Как правило, любой класс, отвечающий за выделение объекта, считается владельцем объекта и поэтому отвечает за освобождение экземпляра. Руководство по программированию управления памятью дает хорошее описание этого, особенно в разделе «Владение и распоряжение объектами»

0 голосов
/ 06 июня 2011

YES. если вы не выпускаете его в классе Bar, вы должны выпустить его.

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