неверное уменьшение счетчика ссылок объекта, который в данный момент не принадлежит вызывающей стороне - PullRequest
0 голосов
/ 12 марта 2012

Привет всем, я запускаю свой код через инструмент анализатора в 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];
}

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

1 Ответ

0 голосов
/ 12 марта 2012

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

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

...