Я создал класс, который использует NSURLConnection и KVC для создания объектов из списков на сервере.Instruments сообщает, что у меня есть куча утечек памяти из-за функции, которая обрабатывает данные, возвращаемые с сервера:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
hasOutstandingCall = NO;
NSError* sError;
NSDictionary* tmpDict = [NSPropertyListSerialization propertyListWithData:receivedData
options:NSPropertyListImmutable
format:NULL error:&sError];
self.lastResponse = [ServerResponse new];
//NSLog(@"server responded: %@",tmpDict);
[lastResponse setValuesForKeysWithDictionary:tmpDict];
if(tmpDict.count == 0){
lastResponse.success = NO;
lastResponse.errorId = -1;
lastResponse.errorMessage = @"Couldn't understand server response";
[[NSNotificationCenter defaultCenter] postNotificationName:@"serverDidRespond" object:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"requestDidFail" object:self];
NSLog(@"failed to deserialize response");
NSString* serverMessage = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"SERVER SAID: %@",serverMessage);
[serverMessage release];
[receivedData release];
return;
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"serverDidRespond" object:self];
if(lastResponse.success){
if(lastResponse.resultQuery)
NSLog(@"%@ response: query with %d rows",lastFName, lastResponse.resultQuery.count);
else if(lastResponse.resultObject)
NSLog(@"%@ response: object",lastFName);
[[NSNotificationCenter defaultCenter] postNotificationName:@"requestDidSucceed" object:self];
}else{
NSLog(@"%@ response: ERROR id: %d, message: %@",lastFName, lastResponse.errorId, lastResponse.errorMessage);
[[NSNotificationCenter defaultCenter] postNotificationName:@"requestDidFail" object:self];
}
[receivedData release];
}
Instruments говорит, что я передаю ответ сервера, и множество других вещей, которые проходят через этофункция.Всегда ли вещь «Ответственный фрейм» ссылается на то, что изначально создало пропущенный объект, несмотря ни на что?Должен ли я просто искать, как этот материал просочится в будущем, или у меня есть проблема в этой функции?Насколько я понимаю, tempDict, sError автоматически высвобождаются, когда возвращаются из сериализации.Я отправляю предположительно просочившийся serverResponse в синтезированный установщик, который освобождается в методе dealloc, поэтому я не вижу, в чем проблема.У кого-нибудь есть понимание?