2010-06-29 10 views
0

Еще новичок в управлении памятью в приложениях iPhone, у меня есть вопрос о новичке. Скажем, у меня есть метод, который использует атрибуты AppDelegate. В начале этих методов, я получаю делегат как:Должны ли быть отменены делегаты приложений?

// Get delegate 
MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

Нужно ли мне выполнять какие-то выпустить в конце метода (я думал о добавлении [релиз делегата] в конце каждого методы, подобные этой).

Вообще говоря, нужно ли в конце метода выпустить все переменные объекта (NSString, NSData, ...), созданные в этом методе?

Спасибо большое, Люк

ответ

1

Простое правило:

Если, когда вы получили ссылку на объект (AppDelegate в данном случае), вы не звонили alloc на объект, то вы не нужно освободить. Если вы набрали alloc в этой строке кода, который вы указали, вы должны позвонить по телефону [delegate release];

+0

Большое спасибо, что многое разъясняет :) – Luc

+0

Это не 'init', это важная часть, это' alloc'. Правило CARN, если метод содержит Copy, Alloc, Retain или New, вам, скорее всего, нужно будет его освободить. – Jasarien

+0

Изменен мой ответ из init, чтобы выделить. Спасибо – jamone

1

№ Это просто ссылка на вашего делегата, который, скорее всего, используется другими частями вашей программы.

+0

ОК спасибо, кстати, освобождение объекта, когда это не обязательно, может вызвать проблемы? – Luc

+0

Если вы отпустите своего делегата, да, это обязательно вызовет проблемы. Стоит учиться, когда отпускать, а когда нет. Важно выпускать только столько раз, сколько вам нужно, и не раз больше или меньше. –

 Смежные вопросы

  • Нет связанных вопросов^_^