iPhone SDK: Как я могу исправить эту утечку? - PullRequest
0 голосов
/ 10 августа 2011

У меня есть утечка, но я не могу найти проблему;

@property (nonatomic,retain) NSMutableData *responseXMLData;
@property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData;

enter image description here

-(void)dealloc {
    [doc release];
    doc=nil;
    [xmlBodyTemp release];
    [responseXMLData release] ;
    responseXMLData=nil;
    [lastLoadedResponseXMLData release];
    lastLoadedResponseXMLData=nil;
    [xmlBody release];
    [super dealloc];
}

1 Ответ

5 голосов
/ 10 августа 2011

Не видя ваш метод dealloc, мы не можем быть уверены, что вы правильно указали значения этих свойств.

Но в опубликованном коде я вижу одну серьезную проблему.Но это не то, о чем вы думаете.

self.lastLoadedResponseXMLData = docTempData;

Эта строка, хотя и помечена XCode, в порядке (если вы правильно указали значение в dealloc).

self.responseXMLData = [self.lastLoadedResponseXMLData copy];

Эта строкаОднако это не хорошо.Он создает копию любого значения в self.lastLoadedResponseXMLData, но вы никогда не выпускаете ссылку из-за копии.self.responseXMLData, поскольку он объявлен как «сохранить», добавляет собственную ссылку на объект и (при условии правильного сброса значения в dealloc) эта ссылка является очищенной.

Если вы нена самом деле не нужно заботиться о том, является ли объект тем же или является копией, просто воздержитесь от копирования.В противном случае, autorelease это:

self.responseXMLData = [[self.lastLoadedResponseXMLData copy] autorelease];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...