Ссылка на то, когда выпустить в Objective-C - PullRequest
0 голосов
/ 30 июля 2010

У меня повторяющаяся проблема в Objective-C. Я либо выпускаю вещи слишком много времени, либо недостаточно. или, может быть, я их недостаточно удерживаю ...

Может ли кто-нибудь указать мне хороший справочник, который даст мне практическое правило, когда мне нужно сохранить и отпустить?

Например:

Я помню, как читал где-то, что некоторые объекты приходят предварительно сохраненными, поэтому мне нужно освободить их, но не сохранять. Какие это объекты?

если я выделю объект и нуждаюсь только в этом методе, нужно ли его освобождать? сохранить это?

Очевидно, что если я что-то сохранил, мне нужно восстановить его, но после этого я немного потерялся.

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Существует один и только один канонический справочник: Apple Руководство по управлению памятью для Какао или iPhone.

2 голосов
/ 30 июля 2010

Правила, как правило, довольно простые.Если вы получаете объект одним из следующих способов:

id obj = [[MyObject alloc] init];
id obj = [myObject retain];
id obj = [myObject copy];
id obj = [myObject mutableCopy];

, то вам нужно освободить его в какой-то момент - тем же методом или вашим методом dealloc, как правило.Другими словами, балансируйте ваши звонки на alloc, retain, copy и mutableCopy с соответствующим вызовом release.

Я помню, как где-то читал, что некоторые объекты приходят заранееЯ должен выпустить их, но не удерживать.Что это за объекты?

Это случается редко.В документации для вызываемого метода должно быть указано, что вы несете ответственность за освобождение возвращенного объекта;в противном случае вы должны предположить, что вы получаете объект, который был автоматически выпущен.

, если я выделю объект и нуждаюсь в нем только в этом методе, нужно ли мне его освобождать?сохранить его?

Да, вам нужно освободить его (но вам не нужно его сохранять).(Вы также можете использовать один из вспомогательных методов, которые возвращают автоматически освобожденный объект, если вы собираетесь использовать его только в этом методе.)

...