2010-10-06 5 views
1

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

пожалуйста также сказать кое-что о копии заявления .....

ответ

4

retain противоположна release, вместо уменьшения счетчика ссылок это увеличивает его один. Когда вы удаляете объект из NSArray, вы, как правило, должны retain, поскольку его удаление вызовет release для вызова этого объекта. сохранение используется, когда вы храните ссылку на объект как переменную экземпляра в одном из ваших классов. Если вы используете свойства, большинство вызовов retain будут автоматически выполнены для вас.

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

@property (retain) NSNumber* input; 

генерировать бы:

- (void) setInput: (NSNumber*)input 
{ 
    [input autorelease]; 
    input= [input retain]; 
} 
3

Концепция retain - это точное значение английского слова; вы хотите, чтобы объект стоял.

По соглашениям почти все объекты, к которым вы получаете доступ, будь то возвращаемые значения или аргумент метода, являются autoreleased. Это означает, что они будут «собранный мусор» когда-то позже, где «через некоторое время» вскоре после выхода текущего метода.

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

  • alloc
  • copy
  • new

Эти три слова в имени метода подразумевают retain. Пример двух сохранил объекты:

Foo* foo = [[Foo alloc] init]; 
Foo* bar = [foo copy]; 

Пример, который объекты, которые не удерживаемой:

Foo* foo = [Foo fooWithInt:42]; 
Bar* bar = foo.bar; 

release является противоположным, является средством; «Мне больше не нужен объект, и он может быть немедленно удален».

autorlease является немного более снисходительным и означает; «Мне больше не нужен объект, но держите его некоторое время на случай, если кто-то захочет его сохранить». Вы должны всегда autorelease все возвращают значения из ваших собственных методов.