Нужно ли сохранять параметры, переданные в пользовательский метод initWith? - PullRequest
3 голосов
/ 28 апреля 2011

например:

в интерфейсе:

@property(retain) NSObject* anObject;

в интерфейсе, в реализации:

-(id)initWithAnotherObject:(NSObject*)another{
    if(self = [super init]){
         anObject = another;    //should this be anObject = [another retain]?
    }
    return self;
}

Ответы [ 2 ]

6 голосов
/ 28 апреля 2011

Да, поскольку вы не можете гарантировать, что «другое» время жизни будет таким же, как и время жизни создаваемого вами объекта, вы должны убедиться в этом, сохранив его в методе init (и не забудьте освободить его в методе dealloc).Таким образом, верно следующее:

...
if(self = [super init]){
     anObject = [another retain];
}
...

Еще одна вещь - определяя сохраняющееся свойство для объекта, вы говорите, что вступаете во владение этим объектом, и, следовательно, вы должны освободить его в методе dealloc.Если вы не сохраните «другой» параметр в методе init, он будет в конечном итоге освобожден (либо в dealloc, либо в методе setter) без сохранения - поэтому ваше приложение может завершиться с ошибкой EXEC_BAD_ACCESS.

2 голосов
/ 29 апреля 2011

Я думаю, что это хорошая практика

self.anObject = another;

но это то же самое

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