在Objective-C中订购和发布NSArray

时间:2011-04-06 11:06:52

标签: objective-c memory-leaks nsarray release

我正在尝试对一系列国家进行排序。这种方式有效,但我无法弄清楚释放tmpArray的方法。我该如何发布它并且有更好的方法吗?

// PUT COUNTRIES IN ARRAY
NSString *myFile = [[NSBundle mainBundle] pathForResource:@"Countries" ofType:@"plist"];
NSArray *tmpArray = [[NSArray alloc] initWithContentsOfFile:myFile]; 
tmpArray = [tmpArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];  
arrayCountries = [[NSArray alloc] initWithArray:tmpArray] ;
   //   [tmpArray release];

1 个答案:

答案 0 :(得分:2)

-autorelease你分配/初始化的那个(因为当你用排序的数组替换它时你失去对它的引用)或者使用另一个变量,如'sortedTmpArray'。 / p>

您目前正在做的是“创建此对象并将其分配给tmpArray”,然后“通过过滤此对象创建另一个阵列并将其分配给tmpArray”。此时,您不再有指向您创建的第一个数组的指针,因此无法释放它 - 它已泄露。

解决方案是在创建它时将其放在自动释放池中,或者只使用两个单独的指针。或者,您可以在第一次创建可变数组,并使用-sortUsingDescriptors:对其进行排序,而不是创建两个单独的数组。