Из книги «Learn Objective-C на mac (второе издание)». Почему retain count
является 2, но не 1 в следующем фрагменте кода: -Что такое учет в этом фрагменте кода?
- (void) setEngine: (Engine *) newEngine
{
[engine release];
engine = [newEngine retain];
// More BAD CODE: do not steal. Fixed version below.
} // setEngine
some_function
{
Engine *engine = [Engine new]; // count: 1
Car *car1 = [Car new];
Car *car2 = [Car new];
[car1 setEngine: engine]; // count: 2 But why? 1-1=0 (due to [engine release]
// in -(void) SetEngine.
// and after engine=[newEngine retain] retain count is 1.
[engine release]; // count 1
[car2 setEngine: [car1 engine]]; // oops!
return 0;
}
Люди, которые на самом деле _use_ Сохранять количество почти всегда делают неправильные вещи :-) – paxdiablo
[релиз] двигатель вызова для предыдущего выставиться двигателя. Используйте Arc, это намного проще. – Sk0prion