在Objective-C中命令并释放NSArray

在Objective-C中命令并释放NSArray,objective-c,memory-leaks,nsarray,release,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]; tmpArra

我正试图对一系列国家进行分类。这种方法很有效,但我想不出发布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];

-autorelease
您分配/init的那个(因为用排序数组替换它时会丢失对它的引用),或者使用另一个变量,如“
sortedTmpArray

您当前正在执行的操作是“创建此对象并将其分配给
tmpArray
”,然后“通过筛选此对象创建另一个数组并将其分配给
tmpArray
”。此时,您不再有指向您创建的第一个数组的指针,因此无法释放它—它已泄漏


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

谢谢!我将NSArray*tmpArray=[[NSArray alloc]initWithContentsOfFile:myFile]autorelease]放入;现在我在分析器中没有收到任何警告。谢谢你,乔舒亚,当然。“arrayCountries”是实例变量吗?如果是这样,您可以通过直接将排序结果分配给arrayCountries来缩短排序时间:arrayCountries=[[tmpArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]retain]。。。需要retain,因为-sortedArrayUsingSelector:返回自动删除的array.Cool。我先用那种方法试过,但没有成功。有了它,它工作得很好,看起来更好。再次感谢!