Так же, как примечание: выполнение viewAccount для назначения может привести к появлению зомби в будущем (в оригинальном фрагменте кода), потому что вы отпустите его в последней строке.
Я бы предложилследующий подход:
- Сделать viewAccounts сохранить снова
- Не использовать авто-релиз, потому что вы не возвращаете его из этого метода
- Payвнимание к dealloc методу метода во фрагменте
Так я бы написал фрагмент с viewAccounts , сохраняющим
if(!self.viewAccounts)
{
ViewAccounts *objViewAccounts= [[ViewAccounts alloc] initWithFrame:CGRectMake(0, yViews, 320, 400) withViewController:self];
[self.view addSubview:objViewAccounts];
self.viewAccounts = objViewAccounts;
[objViewAccounts release];
}
...
- (void) dealloc {
[super dealloc];
[viewAccounts release];
...
}
В исходном коде произошло то, что сохраняющая переменная viewAccounts не была выпущена должным образом в конце жизненного цикла этого класса, и поэтому dealloc не был вызван.
Кстати, когда вы только присвойте переменную, тогда вам придется управлять сохранением самостоятельно, если вы переназначите эту переменную, особенно если вы ее обнуляете.Предположим, что вы установили переменную в NIL, тогда фрагмент может быть выполнен снова.Но затем вы перезаписываете переменную и не можете освободить первое значение.Если вы используете retain , Object-C сделает это за вас.Как правило, я всегда буду использовать retain для свойств, пока у вас не будет достаточно опыта для обработки других случаев.