Вы создали NSArray с именем buildingArray
, но затем добавили объекты в buildingFeedArray
и выпустили buildingFeedArray
.
Вам нужно изменить строку 5:
NSMutableArray *buildingArray = [[NSMutableArray alloc] init];
Кому:
NSMutableArray *buildingFeedArray = [[NSMutableArray alloc] init];
Вы должны освободить объекты как можно скорее, поэтому в опубликованном вами коде вы не использовали jsonString
после синтаксического анализа, поэтому вы должны выпустить его сразу после.
Также вы можете упростить код, заменив:
SBJsonParser *parser = [[[SBJsonParser alloc] init] autorelease];
NSString *jsonString = [[NSString alloc] initWithData:[request responseData] encoding:NSUTF8StringEncoding];
id response = [parser objectWithString:jsonString error:NULL]; //100.0% memory leak
NSMutableDictionary *peopleDictionary = (NSMutableDictionary *)response;
С:
NSString *jsonString = [[NSString alloc] initWithData:[request responseData] encoding:NSUTF8StringEncoding];
NSDictionary *peopleDictionary = (NSDictionary *)[jsonString JSONValue];
JSONValue
- это удобный метод, добавленный в NSString с помощью инфраструктуры SBJSON,
И вы не изменили peopleDictionary в своем коде, поэтому он не должен быть изменяемым.
Кроме того, среда SBJSON, независимо от того, используете ли вы метод удобства или нет, не возвращает изменяемые объекты, поэтому, если бы вы попытались использовать метод изменяемого класса, компилятор не предупредил бы вас, но приложение зависло бы, когда вы достигли Это.