Выделение объекта напрямую - PullRequest
2 голосов
/ 24 октября 2011

Я все еще изучаю цель C, и есть правило, что никогда нельзя напрямую освобождать объект напрямую. Я не понимаю, что это значит.

Может кто-нибудь привести пример нарушения этого правила ..

вот как это должно быть сделано.

ПРАВИЛЬНЫЙ ПУТЬ

-(id)someMethod {
Class *object = [[Class alloc]init];
[object someMethod];
[object release];
}

Вышесказанное считается правильным ..

Так в чем же плохой путь? заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 24 октября 2011

никогда не освобождать объект напрямую

Это означает, что вы никогда не должны отправлять сообщение -dealloc непосредственно объекту - единственная допустимая ситуация для этого - отправка dealloc суперклассу в реализации dealloc:

- (void)dealloc{
   ...
   [super dealloc];
}

Обратите внимание, что с ARC (Автоматический подсчет ссылок) вам не следует вызывать dealloc даже в этом случае.

2 голосов
/ 24 октября 2011

никогда нельзя напрямую освобождать объект напрямую

Это означает, что вы не должны вызывать deallocate метод object напрямую:

-(void)someMethod {
    Class *object = [[Class alloc]init];
    [object someMethod];
    [object release];    // <- it is correct
    [object dealloc]; // <- error here!
}
1 голос
/ 24 октября 2011

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

...