iphone - не протекает - PullRequest
       3

iphone - не протекает

1 голос
/ 24 июня 2010

Как правильно это сделать?

У меня есть массив, который я буду использовать для нескольких методов. Я буду добавлять объекты к нему, получать значения, заменять значения и т. Д.

Сегодня я делаю это:

Я объявляю это на .h, используя что-то вроде

NSMutableArray *myArray;

как только приложение запускается, я объявляю его на .m, делая что-то вроде

myArray = [[[NSArray alloc] init] retain];

Если я не добавлю сохранение, массив будет освобожден в какой-то момент, и приложение будет аварийно завершено. Но выделение массива в начале приложения и оставление его «открытым», не отпуская его, заставит инструменты плакать, указывая пальцем на меня, называя меня «рычагом» ...

Как это решить? Это правильный способ сделать это? как вы, ребята, делаете такие вещи?

спасибо

Ответы [ 2 ]

3 голосов
/ 24 июня 2010

alloc неявно устанавливает счетчик хранения равным 1. Посылая сообщение retain, вы увеличиваете счетчик хранения до 2. Для того, чтобы объект был освобожден, вам потребуется дважды отпустить его.Невыполнение этого требования может привести к утечке памяти.

В идеале вы должны создать объект в вашем методе init, используя [[NSArray alloc] init], а затем освободить его в вашем методе dealloc следующим образом:

- (void)dealloc {
    [myArray release];
    [super dealloc];
}

Вы также можете найти эту статью полезной: http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

Еще одна вещь: вы объявили myArray как NSMutableArray, но создали его экземпляр как NSArray.Возможно, это приводит к сбою.

2 голосов
/ 24 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...