В инструментах каждый раз отображается протекающий объект CXMLDocument, веб-сервис обращается к XML-запросу И, когда нет доступного подключения к Интернету.Вот мой код:
NSString *path = ... some URL
NSURL *url = [NSURL URLWithString: path];
CXMLDocument *itemListParser; = [[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil];
... other stuff ...
Если мы будем копать глубже и отследим вызов initWithContentsOfURL, мы найдем этот метод в "CXMLDocument.m":
- (id)initWithContentsOfURL:(NSURL *)inURL encoding:(NSStringEncoding)encoding options:(NSUInteger)inOptions error:(NSError **)outError
{
if (outError)
*outError = NULL;
NSData *theData = [NSData dataWithContentsOfURL:inURL options:NSUncachedRead error:outError];
if (theData)
{
self = [self initWithData:theData encoding:encoding options:inOptions error:outError];
}
else
{
[self release]; //My suggested fix: We need to release an alloc'ed object because after the "self = null" it will be unable to release it. See the info below.
self = NULL;
}
return(self);
}
Появляется, если theData равен nil(например, без соединения), тогда self будет равно нулю, и поэтому результат вызова TouchXML initWithContentsOfURL также будет равен нулю.Итак, в моем коде:
CXMLDocument *itemListParser; = [[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil];
Я выделяю память, но init возвращает nil, поэтому itemListParser также становится nil.Поэтому позже попытка освободить анализатор с помощью [itemListParser release] ничего не делает, потому что release отправляется на nil.
Мне удалось исправить утечку, добавив «[self release]» перед «self = NULL» (см. строку с моим комментарием в методе TouchXML initWithContentsOfURL)