Свойство и синтезировать: в этом коде, без "Я"? - PullRequest
1 голос
/ 24 июля 2011

У меня простой вопрос:
если мы не используем здесь свойство dataController в другом классе в проекте, нам не нужно использовать "@property" и синтезировать, и мы могли бы просто сделатьпростая операция "=" с контроллером dataController =, как во втором фрагменте кода?:

DataController *controller = [[DataController alloc] init];  
self.dataController = controller;  
[controller release];  
rootViewController.dataController = dataController;  

Второй:

DataController *controller = [[DataController alloc] init];   
dataController = controller;  

Итак, если нам не нужно свойство вне класса, мы можем просто сделать это так?Спасибо

Ответы [ 3 ]

3 голосов
/ 24 июля 2011

Вы правы, если dataController является сохраняющим свойством.

Если вы используете его только один раз, свойство не принесет особой выгоды.Если вы часто меняете его значение (то есть назначаете другой DataController), то даже частное свойство может иметь смысл только для упрощения управления памятью.

2 голосов
/ 24 июля 2011

Если dataController не будет использоваться ни в каком другом классе, вам не нужно его синтезировать. Тогда Да, вы можете просто создать его внутри этого класса.

(Конечно, если ваш dataController в вашем rootViewController также нуждается в ссылке на него, то вам также нужно это обработать)

1 голос
/ 24 июля 2011

Да, второй пример работает нормально, при условии, что dataController объявлен как iVar, а не просто как локальная переменная для метода, в котором он используется - но вы, вероятно, знаете об этом.

В обоих примерах вам, конечно, нужно высвободить сохраненное значение в методе dealloc.

...