Как создать авто-релиз NSDictionary в этом случае? - PullRequest
1 голос
/ 15 сентября 2011

У меня есть экземпляр NSMutableArray с именем records, и я хотел бы отправить одно из его значений (это NSDictionary) в метод, но я думаю о том, как избежать его утечки или правильного освобождения. Вот что я сейчас делаю:

NSDictionary *pdata = [self.entries objectAtIndex:indexPath.row];

[self start_download:pdata];

[pdata release]; // <--> Is it ok to do this ?

Спасибо за помощь,

Stephane

Ответы [ 4 ]

4 голосов
/ 15 сентября 2011

вы не распределили, не скопировали и не сохранили pdata, поэтому не публикуете его

3 голосов
/ 15 сентября 2011

Вы абсолютно не должны выпускать pdata, так как вы никогда не сохраняли его. -objectAtIndex: возвращает не принадлежащий объекту. Если -start_download: должен ссылаться на pdata после его возврата (например, если он удерживает его для некоторого асинхронного процесса), то он должен сохранить pdata сам, и впоследствии он должен выпустить pdata, когда это будет сделано, но это ортогонально к коду, который вы вставили.

Если вы этого еще не сделали, вам следует прочитать Правила управления памятью какао .

2 голосов
/ 15 сентября 2011

Я бы заставил start_download сохранить pdata, а затем выпустить его, когда все будет готово.Всегда полезно иметь подпрограммы, которые должны привязываться к данным для их сохранения и освобождения, так что вам все равно, как объект попал к вам и что будет с ним после.

2 голосов
/ 15 сентября 2011

Есть ли у вас метод делегата для start_download для обработки после завершения загрузки?Вы должны отпустить его тогда.

...