iOS: когда лучше всего освободить объект модели в контроллере представления? - PullRequest
0 голосов
/ 25 мая 2011

У меня здесь довольно простой вопрос. Я нахожу, что довольно часто я создаю экземпляры объектов модели в viewDidLoad: метод контроллеров представления, скажем, в случае объекта веб-службы, который используется для заполнения элементов таблицы в контроллере представления:

- (void)viewDidLoad {
    [super viewDidLoad];    
    itemService = [[BlogItemService alloc] init];
}

Где мне выпустить itemService? В viewDidUnload или dealloc?

Кроме того, распространено ли выделение таких объектов в viewDidLoad? Разве нет более подходящего метода типа init?

Обновление: У меня особое беспокойство. Допустим, я освобождаю itemService в dealloc. Если представление выгружается, а затем перезагружается, но контроллер представления не освобождается, не возникнет ли утечка памяти, поскольку предыдущий экземпляр itemService теряется при создании нового экземпляра?

Ответы [ 4 ]

1 голос
/ 25 мая 2011

Где мне выпустить itemService? В viewDidUnload или dealloc?

если объект легкий или его создание занимает много времени, сделайте это в dealloc. если он занимает много памяти, используйте соответствующие пары в viewDidLoad / viewDidUnload.

Кроме того, распространено ли выделение таких объектов в viewDidLoad?

да

Нет ли более подходящего метода типа init?

назначенный инициализатор (в некоторых случаях)

Обновление: у меня особое беспокойство. Допустим, я освобождаю itemService в dealloc. Если представление выгружается, а затем перезагружается, но контроллер представления не освобождается, не будет ли у меня утечки памяти, поскольку предыдущий экземпляр itemService теряется при создании нового экземпляра?

, чтобы избежать этого, используйте:

BlogItemService * item = [[BlogItemService alloc] init];
self.itemService = item;
[item release], item = nil;
0 голосов
/ 25 мая 2011

Если вы спросите меня, лучшее место для инициализации объектов модели - метод init класса, а release - dealloc.

0 голосов
/ 25 мая 2011

Это очень необычная ситуация, но если вы разгрузите, а затем снова загрузите просмотр, у вас будет утечка, как вы и предлагали. Так что, где размещать объекты, это хороший вопрос, и это скорее зависит от вашего выбора. Вероятно, лучше загружать объекты каждый раз, когда загружается представление, когда они очень тяжелые, и некоторые небольшие объекты, вероятно, будет легче загрузить в init. Но вы также должны осторожно обращаться с контроллером представления, если хотите многократно загружать и выгружать представление, поскольку общая схема заключается в уничтожении контроллера каждый раз, когда представление исчезает (и в основном это хорошее решение).

0 голосов
/ 25 мая 2011


Вы должны освободить объект в dealloc

Вы можете выделить память, используя:

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