Когда использовать `self` в Objective-C?

Уже более 5 месяцев я нахожусь в Objective-C, я также опубликовал свое первое приложение в App Store, но у меня все еще есть сомнения по поводу основной функциональности языка.

Когда я должен использовать self доступ к iVars и когда я не?

При выпуске розетки пишешь self.outlet = nil в viewDidUnload, а не в dealloc ты пишешь [outlet release], Зачем?

4 ответа

Решение

Когда ты пишешь self.outlet = nil метод [self setOutlet:nil]; называется. Когда ты пишешь outlet = nil; вы получаете доступ к переменной outlet непосредственно.

если вы используете @synthesize outlet; затем метод setOutlet: генерируется автоматически и освобождает объект перед назначением нового, если вы объявили свойство как @property (retain) NSObject outlet;,

Очень очень важный блог, чтобы понять о свойствах метода getter-setter в цели c

                Understanding your (Objective-C) self

http://useyourloaf.com/blog/2011/2/8/understanding-your-objective-c-self.html

Вы используете self, когда ссылаетесь на @property. Обычно это будет @ synthesize'd.

Вы не используете self, если ссылаетесь на "приватную" переменную. Как правило, я использую свойства для элементов пользовательского интерфейса, таких как UIButtons или для элементов, которые я хочу легко получить доступ из других классов. Вы можете использовать модификаторы @private, @protected для явного обеспечения видимости. Однако вы не можете использовать частные методы, которых нет в Objective-C.

Часть о nil, release и dealloc не связана с использованием "self". Вы освобождаете то, что вы сохранили, вы ничего не сохраняете.

Вы должны прочитать руководство Objective-C, оно хорошо написано и очень полезно.

Вы используете себя. когда вы получаете доступ к свойствам класса, в котором вы находитесь (следовательно, к себе). По сути, вы используете self, когда хотите сохранить значение, но только тогда, когда у вас есть retain в определении вашего свойства.

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

Другие вопросы по тегам