1

[searchDictリリース]でクラッシュが発生します。最新の2行の順序を入れ替えても、最新の行でクラッシュします(現在は[searchArrayリリース])。私はObjectiveCを初めて使用しますが、割り当て/リリースが正しく行われていないと思います...ヘルプ?:)

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];
4

1 に答える 1

5

スペースを割り当てて変数に割り当てます。

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 ;)
于 2011-08-13T15:15:46.400 に答える