2011-08-13 14 views
1

[searchDict release]でクラッシュが発生します。最新の2つの行の順番を入れ替えると、最新の行(今は[searchArray release])でクラッシュします。私はObjective Cをかなり新しくしています。私はalloc/release権を持っていないと思います。 :)割り当てられたオブジェクトの再割り当ての問題

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

答えて

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 ;) 
代わりにこのような何かを行います