Есть несколько концепций управления памятью iPhone, которые запутали меня, поэтому я надеялся, что кто-то сможет прояснить это.
(a) Скажем, что я вызываю функцию, которая возвращает изображение, иЯ хочу сохранить это возвращенное изображение в переменной, чтобы я мог назначить его различным другим переменным без необходимости повторного вызова функции генерации изображения каждый раз.На данный момент я делаю следующее:
UIImage *storedImage = [someFunction returnImage];
и, поскольку storedImage
не alloc
'ed, я не освобождаю переменную.
Однако я должен быть явноalloc
взамен и освобождая UIImage
вместо этого?
UIImage *storedImage = [[UIImage alloc] init];
storedImage = [someFunction returnImage];
...do stuff...
[storedImage release];
Что означает выполнение прямого присваивания без alloc
, а не alloc
, переменной и затем присвоения?
(b) В методе init
для различных классов я устанавливаю переменные экземпляра.На данный момент я делаю следующее:
self.arrayVariable = [[NSMutableArray alloc] init];
Однако я видел, как другие выполняют это задание следующим образом:
theArrayVariable = [[NSMutableArray alloc] init];
self.arrayVariable = theArrayVariable;
[theArrayVariable release];
или
theArrayVariable = [[NSMutableArray alloc] init];
arrayVariable = theArrayVariable;
[theArrayVariable release];
.... что такое же, как указано выше, но без self
.
В чем разница между тремя методами и какой лучше использовать?