Заказать и выпустить NSArray в Objective-C - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь отсортировать массив стран.Этот способ работает, но я не могу понять, как выпустить 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 Ответ

2 голосов
/ 06 апреля 2011

Либо -autorelease тот, который вы выделяете / init'd (потому что вы теряете ссылку на него, когда вы заменяете его на отсортированный массив), либо используйте другую переменную, например 'sortedTmpArray'.

То, что вы сейчас делаете, это «создайте этот объект и присвойте ему tmpArray», затем «создайте другой массив, отфильтровав его и присвоив ему tmpArray». В этот момент у вас больше нет указателя на первый созданный вами массив, поэтому нет способа его освободить - он просочился.

Решение состоит в том, чтобы поместить его в пул автоматического выпуска при его создании или просто использовать два отдельных указателя. Кроме того, вы можете создать изменяемый массив в первый раз и использовать -sortUsingDescriptors: для его сортировки вместо создания двух отдельных массивов.

...