Вы выделяете пространство и назначаете его для переменных:
NSMutableDictionary *searchDict = [[NSMutableDictionary alloc] init];
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
Но затем вы присваиваете им не локально распределенные данные:
searchDict = [listOfItems objectAtIndex:i];
searchArray = [searchDict objectForKey:@"Entries"];
Так что, в принципе, вам не нужно выделять и освобождать. Вместо этого сделайте что-то вроде этого:
NSMutableDictionary *searchDict; // Just declartion, no allocation / init
NSMutableArray *searchArray; // Just declartion, no allocation / init
for(int i = 0; i < 2; i++) { // Run two times ("Favorites" and "All")
searchDict = [listOfItems objectAtIndex:i];
searchArray = [searchDict objectForKey:@"Entries"];
for (NSString *sTemp in searchArray) {
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[listOfItemsDynamic addObject:sTemp];
}
}
// No release needed here
Если вы знакомы с C, это похоже на:
char *pChar;
pChar = malloc(15); // allocate memory and assign to pChar
pChar = "Hello"; // assign new address to pChar
free(pChar); // Error here ;)