2014-09-23 2 views
-1
@interface Rectangle 
@property (retain) UIView *view; 
@end 

@implementation Rectangle 

CGRect frame = CGMakeRect(); 
self.view = [[UIView alloc] initWithFrame:frame] 
Student *student=[[Student alloc]init]; 
[student release];       // not using this but using dealloc on it see below 
  • (пустоты) dealloc { [_view релиз]; [super dealloc]; [student dealloc]; } @end

Мой вопрос: здесь, почему мы должны освободить память на супер-объект ???? что произойдет, если мы освободим память от ученика, выпустив его?Должен ли я вручную освобождать свойства, объявленные как сохраняемые?

+0

Спросите себя, почему вы не используете ARC (автоматический подсчет ссылок). – rmaddy

+0

И найдите современный учебник. Нет необходимости в строке '@ synhesize'. – rmaddy

+1

Полунезависимый, но если вы не используете ARC, и вы переопределяете -dealloc, как вы там делаете, вы ДОЛЖНЫ называть [super dealloc] в конце его. В противном случае вы пропустите объект. –

ответ

1

retain и dealloc не являются комплиментами. retain и release являются дополнениями, добавлением и вычитанием из счетчика ссылок объекта соответственно.

Если синтезируется сеттер делает retain, то ваш dealloc должен сделать release[super dealloc]).

Современный подход заключается в использовании ARC, падение @synthesize, и всегда относится к вашим свойствам с синтезированными сеттерами и добытчиками, как это:

id foo = self.property; 
self.property = foo; 

За исключением init, где это лучше сказать:

_property = foo; 
+0

нравится говорить Студент * student = [[Студенческое выделение] init]; затем [выпуск студента]; он и использовать dealloc, как и выше, тогда [super dealloc] dealloc метод освобождает этот объект ???? и почему мы должны освободить супер объект ??? –

+0

Dealloc - запутанное имя. Он не освобождает объект, он предупреждает объект, что он должен быть освобожден, давая ему возможность выпустить что-либо его сохранение. Вызов super dealloc вызывает унаследованный dealloc, который выдает свойства, определенные суперклассом. – danh

+0

Вот хороший документ по теме, написанный после введения ARC. Современный способ сделать это - использовать ARC, который упрощает многое. Но это прекрасно, что вы узнаете о старом пути, так как это поможет вам лучше понять ARC. http://rypress.com/tutorials/objective-c/memory-management.html – danh

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