2011-01-05 2 views
5

Я начал отбиваться от своего приложения и пробрался глубоко, и он отлично работает, но я думаю, что я позволил некоторым вещам немного поработать.освободить все, что у вас есть @property, сохранить @synthesize?

Для каждого @property (nonatomic, keep), который затем я создаю @synthesize, поскольку мне нужно иметь [переменную release] в методе dealloc - это правильно?

Даже если это IBOutlet?

+0

+1 для хорошей ясности. – gabaum10

+0

@Joe (или 'copy') –

+0

спасибо, ребята, я думаю, что он наконец пробил сквозь мой толстый череп – Slee

ответ

11

Да. Вы объявили право собственности на объект, сделав его retain, что означает, что вы должны отказаться от права собственности, выпустив его.

+2

См. Также: http://stackoverflow.com/questions/2189919/how-is-release-handled-for-synthesized -retain-properties –

+0

спасибо, моя первая программа, и я просто так бездорожью - есть тонна свойств для выпуска :) – Slee

+0

, вы можете проверить Accessorizer ... это облегчит вашу жизнь. http://www.kevincallahan.org/software/accessorizer.html – joshpaul

1

Да. Если вы сохраните собственность, вы несете ответственность за ее освобождение.

Заявленные свойства в основном заменяют объявления метода доступа; при синтезе свойства компилятор создает только отсутствующие методы доступа. Не существует прямого взаимодействия с методом dealloc, свойства не будут автоматически выпущены для вас.

Declared Properties

Обычно вы будете делать это в методе dealloc.

- (void)dealloc { 
    [property release]; 
    [super dealloc]; 
} 
4

Кроме того, если у вас есть удерживаемой IBOutlet, вы должны освободить его и установить его nil в -viewDidUnload. Это позволяет объекту выпускать свои выходы при удалении представления, особенно в ответ на предупреждение о низкой памяти. Установив ivar на nil в этом методе, вы избегаете риска двойного высвобождения ivar, если объект впоследствии освобождается.