2012-03-12 1 views
0

Привет всем Я запускаю свой код через инструмент анализатора в среде IDE, где я получаю указание в dealloc и говорю «неправильный декремент счетчик ссылок на объект, который не принадлежит в данный момент по вызывающему»Я создаю NSArray и отпускание правильно мой пример кода ниженеправильный декремент ссылочного счета объекта, который не принадлежит на данный момент вызывающим абонентом

myClass.h

{               
NSArray *arrayOfChapters; 

} 
@property (nonatomic, retain) NSArray *arrayOfChapters; 

@end 

myClass.m:

-(void)parseAndLoadChaptersAndPages{ 
self.arrayOfChapters = chapterLoader.arrayOfChapters; 
} 
-(void)dealloc{ 
    [self.arrayOfChapters release]; 
    [super dealloc]; 
} 

Может ли кто-нибудь сказать мне, почему он дает мне предупреждение. Спасибо заранее.

+0

вы не называли '[super dealloc]' '' dealloc'. Также попробуйте '[arrayOfChapters release]' вместо '[self.arrayOfChapters release]'. –

+3

Поскольку вы используете свойства, вы должны позволить устройству освободить объект. Вместо этого сделайте self.arrayOfChapters = nil. – tarmes

ответ

0

Вы можете либо освободить ivar напрямую ([arrayOfChapters release]), либо вы можете установить свойство на nil (self.arrayOfChapters = nil), и метод setter выпустит вам ivar.

Объект владеет ivar arrayOfChapters, но не обязательно возвращаемым значением метода arrayOfChapters, который вы вызываете, используя синтаксис свойства. Это немного запутанно, потому что ивар и метод имеют точно такое же имя. В этом случае метод arrayOfChapters возвращает ivar, поэтому это не проблема. Однако аналитик полагает, что метод теоретически может вернуть другой объект, и в этом случае вы бы перевыпускали этот объект.

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

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