Если заявленная собственность сохраняется, например,
@property (nonatomic, retain) id something;
тогда при звонке
self.something = newValue;
// OR (the two are equivalent)
[self setSomething:newValue];
реализация сеттера сохранит значение newValue
.
1010 * Поэтому *
retain +1 retain +1
| |
+------------+ +---------------------+
| | | |
self.something = [[NSObject alloc] init];
Если вы release
ивар something
в dealloc
, тогда у вас все еще будет удержание +1
, которое вы не освободите.
Чтобы исправить это, используйте ваш первый метод (который предпочтительнее) или добавьте autorelease
self.something = [[[NSObject alloc] init] autorelease];
Так зачем использовать первый метод? / Почему вы видите это в примерах?
В условиях ограниченной памяти хорошо контролировать свою память. Таким образом, вы должны явно освобождать вещи, когда они больше не используются для максимально эффективного использования среды.