Цель-C: почему это присвоение свойства не работает должным образом? - PullRequest
1 голос
/ 21 августа 2010

Я до сих пор иногда удивляюсь, когда дело доходит до деталей Objective-C.

Имея этот заголовочный файл: .h:

   AVCaptureSession *capSession;
   @property(nonatomic, retain) AVCaptureSession *capSession;

Почему в ObjC правильно делать это:

.m:

// Create instance locally, then assign to property and release local instance.
AVCaptureSession *session = [[AVCaptureSession alloc] init];
self.capSession = session;
[session release];

и почему это неправильно / не работает / приводит к неправильному поведению, чтобы сделать это:

.m:

// Directly assign to property.
    self.capSession = [[AVCaptureSession alloc] init];

Основная проблема, которую я вижу, в том, что мне не хватает «релиза» во 2-й версии. Можно ли использовать «autorelease» в качестве альтернативы:

  self.capSession = [[[AVCaptureSession alloc] init] autorelease];

Рене

1 Ответ

1 голос
/ 21 августа 2010

Да, ваша альтернатива autorelease в порядке. alloc / init способ создания объектов дает вам сохраненный объект. Затем вы используете ваш метод доступа через self.capSession = session, который снова вызывает retain, поэтому вам нужно release. autorelease останется таким же.

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