Какой смысл этого в объективе-с - PullRequest
2 голосов
/ 31 июля 2009
SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];

Почему так всегда делается? Почему не

self.theObject = [[SomeObject alloc] init];

Ответы [ 2 ]

11 голосов
/ 31 июля 2009

Если свойство theObject является сохраняющим свойством, первый способ верен, поскольку он не пропускает память. Это также более эффективно, чем правильный способ написания второй версии, а именно:

self.theObject = [[[SomeObject alloc] init] autorelease];

Всякий раз, когда вы создаете объект с alloc, вы отвечаете за его освобождение каким-либо образом, release или autorelease.

1 голос
/ 31 июля 2009

Вторая версия пропускает экземпляр SomeObject, поскольку self.theObject вызовет установщик, который при правильном написании сохраняет объект.

Вы могли бы просто сделать

theObject = [[SomeObject alloc] init];

и некоторые люди, конечно, делают. Другие предпочитают всегда использовать средства доступа, хотя бы для согласованности или во избежание ошибок, если средства доступа имеют побочные эффекты (например, вы бы обходили уведомление KVO, что может быть проблемой, если оно не является частью метода init).

...