Я новичок в объективе, и у меня проблемы с управлением памятью, я прочитал правила управления памятью Apple, но мне нужно немного разъяснений здесь, это довольно просто, я думаю, но я хотел бы спросить вас, если я прав:Должен ли я отпустить это свойство?
Учитывая это свойство:
@interface Test : NSObject {
NSArray *property1;
}
@property (nonatomic,retain) NSArray* property1;
@end
...
//And its implementation:
@implementation Test
@synthetize property1;
-(id) init {
if (self=[super init]) {
self.property1=[[[NSArray alloc] initWithCapacity:5] autorelease];
}
return self;
}
-(void) dealloc {
[super dealloc];
[property1 release];
}
@end
ли право выдавать сообщение Autorelease для выделенного объекта в методе инициализации? , я делаю это в документе Apple, говорит, что каждый выделенный объект должен быть выпущен разработчиком, тогда, я думаю, alloc устанавливает значение удержания в 1, тогда свойство (неатомное, сохраняемое) добавляет 1, поэтому сохраняем == 2, затем autorelease substracts 1, и когда вызывается метод dealloc, свойство1 освобождается и сохраняет count == 0, я прав?
FYI: '[super dealloc]' должно быть последним в вашем методе dealloc. Выполнение чего-либо после вызова '[super dealloc]' является ошибкой. – Chuck
Вы можете упростить создание NSArray, выполнив: '[NSArray arrayWithCapacity: 5]'. Это то же, что и у вас выше. –
Также поймите, что вы создаете неизменяемый массив емкостью 5, и вы не сможете изменять содержимое после создания без замены массива. Вы также можете вызвать '[NSMutableArray arrayWithCapacity:]', но вы хотите, чтобы тип свойства соответствовал, если массив должен быть изменен. –