init] в автоматическом подсчете ссылок

Я знаю, что я должен использовать:

ObjectClass *tmpObject = [[ObjectClass alloc] init];
realObject = tmpObject;
[tmpObject release]

для инициализации realObject (где realObject — объект внутри класса)

Но теперь, в режиме ARC, отпускание происходит автоматически, мне все еще нужно использовать эту технику? Могу ли я просто использовать realObject = [[ObjectClass alloc] init];? Если нет, есть ли какая-то конкретная причина, по которой он будет течь?

Спасибо


person Tim Purple    schedule 26.06.2011    source источник


Ответы (2)


Если вы компилируете с -fobjc-arc (т.е. с использованием ARC), то вам не только не нужно вызывать release, но и произойдет ошибка компилятора, если вы это сделаете. При использовании ARC задачей компилятора является вставка вызовов retain и release за вас.

person Spencer Uresk    schedule 26.06.2011
comment
Итак, какой метод создания объекта правильный (или лучший)? Должен ли я изменить все мои realObject = [[ObjectClass alloc] init];? - person Tim Purple; 26.06.2011
comment
Создание объекта остается прежним, IIRC. - person Wevah; 26.06.2011
comment
Да -- создание объекта остается прежним, просто в коде нет никаких сохранений/релизов. Проблема, однако, в том, что код Тима в первую очередь сломан. - person bbum; 26.06.2011

person    schedule
comment
Я не понимаю, почему этот код не работает. Я только что прочитал пример кода, в котором было: «SecondViewController *aSecondView = [[SecondViewController alloc] initWithNibName:@SecondView bundle:nil];» Разве это не то же самое? получите указатель временного объекта и инициализируйте то, что хотите, затем установите указатель с реального объекта на инициированный материал. Наконец, отпустите указатель временного объекта. [сам setSecondViewController:aSecondView]; [выпуск aSecondView]; - person Tim Purple; 27.06.2011
comment
В этом случае setSecondViewController: сохранит aSecondView (если детали внутренней реализации сочтут это необходимым -- скорее всего, сохранит, может сделать что-то еще). - person bbum; 27.06.2011