Концепция retain
- это точное значение английского слова; вы хотите, чтобы объект стоял.
По соглашениям почти все объекты, к которым вы получаете доступ, будь то возвращаемые значения или аргумент метода, являются autoreleased. Это означает, что они будут «собранный мусор» когда-то позже, где «через некоторое время» вскоре после выхода текущего метода.
Итак, если вы хотите, чтобы объект склеивался даже после выхода текущего метода, вам необходимо установить retain
объект. Все объекты, которые вы когда-либо получить доступ к являются autoreleased и уйдет, если вы явно не вызовете retain
, или получил их от метода, содержащего любое из этих слов:
Эти три слова в имени метода подразумевают retain
. Пример двух сохранил объекты:
Foo* foo = [[Foo alloc] init];
Foo* bar = [foo copy];
Пример, который объекты, которые не удерживаемой:
Foo* foo = [Foo fooWithInt:42];
Bar* bar = foo.bar;
release
является противоположным, является средством; «Мне больше не нужен объект, и он может быть немедленно удален».
autorlease
является немного более снисходительным и означает; «Мне больше не нужен объект, но держите его некоторое время на случай, если кто-то захочет его сохранить». Вы должны всегда autorelease все возвращают значения из ваших собственных методов.
Да, необходимо прочитать для каждого программиста Objective-C. – DarkDust