2011-08-13 72 views
1

在[searchDict發行版]中發生崩潰。如果我切換最後兩行的順序,它仍然會在最後一行(現在是[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 ;)