+numberWithDouble
называется удобным методом . Это означает, что он заменяет небольшой фрагмент кода, который будет выглядеть следующим образом:
[[[NSNumber alloc]initWithDouble:double]autorelease];
Большинство (если не все) удобные методы по умолчанию имеют автоматическое освобождение, поэтому код OP с автоматическими выпусками является неправильным, поскольку он уменьшает количество сохраняемых данных до -1.
Однако знак равенства эквивалентен
[self setRightFoot:[[[NSString alloc]initWithString]autorelease]];
, который увеличивает счет сохранения rightFoot и требует его освобождения в другом месте.
Что касается кода -addObject
, он возвращает void, так что фактически он не увеличивает счетчик сохранения получателя и не требует освобождения получателя. Объект в массиве уже должен быть освобожден вспомогательным методом для дальнейшего использования, что не имеет значения, поскольку массив теперь содержит его «копию».