Проблема высвобождения выделенных объектов - PullRequest
1 голос
/ 13 августа 2011

Сбой происходит при [выпуске searchDict].Если я переключаю порядок двух последних строк, он все равно падает на последней строке (теперь [searchArray release]).Я довольно новичок в Objective C, и я думаю, что у меня нет права на выделение / выпуск ... Помощь?:)

NSMutableDictionary *searchDict = [[NSMutableDictionary alloc] init];
NSMutableArray *searchArray = [[NSMutableArray alloc] 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];
    }
}

[searchArray release];
[searchDict release];

1 Ответ

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

Вы выделяете пространство и назначаете его для переменных:

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 ;)
...