Зависит от того, является ли свойство retain
или нет. Большинство свойств объекта сохраняются; Вот как выглядит свойство retain:
- (void)setBlueViewController:(BlueViewController *)bvc {
if (bvc != blueViewController) { // blueViewController is local ivar
[blueViewController release];
blueViewController = [bvc retain];
}
}
Итак, что вы делаете там, создаете счет удержания +2. Когда вы init
, это +1; свойство тогда retain
s, увеличивая это до +2. Ваш dealloc
выпускает его один раз, что снижает его до +1 ... и вы слили это свойство. Поскольку вы alloc
/ init
определяете переменную, вы не хотите использовать установщик; вместо этого присвойте его непосредственно переменной экземпляра.
Создавая его напрямую, он избавляет вас от проблем, связанных с другими release
- чем меньше строк кода, тем меньше ошибок. Например, вы могли бы случайно набрать retain
и не понимать, пока ваша программа не выйдет из строя, потому что вы сохранили массивный класс ...
Конечно, как сказал Калеб, вы могли бы автоматически выпустить, но это фактически позволяет объекту лежать в памяти, пока цикл выполнения не закончится. Это гораздо проще, и дает вам больше контроля, просто не беспокоиться об этом. Нет ничего плохого в назначении alloc
/ init
для ивара; на самом деле, это лучший способ сделать это.