Когда использовать `self` в Objective-C? - PullRequest
4 голосов
/ 31 августа 2011

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

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

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

Ответы [ 4 ]

6 голосов
/ 31 августа 2011

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

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

3 голосов
/ 31 августа 2011

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

                Understanding your (Objective-C) self

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

1 голос
/ 31 августа 2011

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

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

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

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

0 голосов
/ 31 августа 2011

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

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

...