2011-01-11 3 views
1

Правильно ли распределять память для массива, который задан как свойство в методе initWithNibName, если я больше не хочу выделять память для него (даже если представление поп, а затем нажато еще раз)?Iphone Выделить память в initWithNibName

Благодаря

ответ

2

Ну, если вид показан, а затем скрыт, он будет получать как в initWithNibName, а затем release; так что вы должны сделать что-то вроде этого:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    yourArray = [[NSArray alloc] init]; 
} 

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

Независимо от того, как коротка жизнь контроллера представления, он тем не менее получить освобождение, на увольняют, который, в свою очередь, в конечном счете привести к dealloc называют.

2

Правильно, удостоверьтесь, что вы отпустите его в своем dealloc. убедитесь, что когда вы Alloc initing вы НЕ использовать сеттер, вместо этого вы должны Alloc инициализации переменной экземпляра непосредственно:

_myArray = [[NSArray alloc]init]; 

если вы хотите идти только через метод собственности, то сделать что-то вроде этого:

self.myArray = [NSArray array]; 

и снова, не забудьте выпустить его в dealloc:

-(void)dealloc 
{ 
    [_myArray release]; 
    [super dealloc]; 
} 
+0

почему я should't использовать мой сеттер? Спасибо – xger86x

+0

Потому что, если у вас есть свойство «сохранить» (которое у вас есть) или «копировать», то если вы используете свой сеттер, когда вы назначаете initing, этот объект будет удерживаться дважды: 1. В методе alloc. 2. У вашего сеттера. и это приведет к утечке памяти, поскольку вы вызываете «release» только один раз. (и вы ДОЛЖНЫ вызывать выпуск только один раз.), поэтому, если вы хотите использовать установщик, получите объект с автореализацией. –

Смежные вопросы