Правила, как правило, довольно простые.Если вы получаете объект одним из следующих способов:
id obj = [[MyObject alloc] init];
id obj = [myObject retain];
id obj = [myObject copy];
id obj = [myObject mutableCopy];
, то вам нужно освободить его в какой-то момент - тем же методом или вашим методом dealloc
, как правило.Другими словами, балансируйте ваши звонки на alloc
, retain
, copy
и mutableCopy
с соответствующим вызовом release
.
Я помню, как где-то читал, что некоторые объекты приходят заранееЯ должен выпустить их, но не удерживать.Что это за объекты?
Это случается редко.В документации для вызываемого метода должно быть указано, что вы несете ответственность за освобождение возвращенного объекта;в противном случае вы должны предположить, что вы получаете объект, который был автоматически выпущен.
, если я выделю объект и нуждаюсь в нем только в этом методе, нужно ли мне его освобождать?сохранить его?
Да, вам нужно освободить его (но вам не нужно его сохранять).(Вы также можете использовать один из вспомогательных методов, которые возвращают автоматически освобожденный объект, если вы собираетесь использовать его только в этом методе.)