Я лично предпочитаю, если вам нужна область действия объекта, вне класса, тогда перейдите с объявлением свойства. В противном случае объявите его как переменную экземпляра внутри скобок класса, а в файл реализации.(Если вы не унаследовав эту переменную функцию дальнейшего)
Так,
- Если вам требуется, чтобы получить доступ к переменной экземпляра вне класса, то объявить свойство. В заголовочном файле MyClassViewController.h
@property (strong, nonatomic) IBOutlet NSTextField *myTextField;
Так что теперь в других классах, можно получить доступ к этому путем:
MyClassViewController *myClassViewController = [[MyClassViewController alloc] init];
[myClassViewController.myTextField setText:@"MyValue"];
также получить значение как
NSLog(@"%@", [myClassViewController.myTextField text]);
Если вам не нужен такой общий доступ, но вы хотите, чтобы он наследовать. Затем объявите в блоке объявления класса сам. В заголовочном файле ViewController.h
@interface ViewController { @public: // or @protected
NSString *myString;
}
Теперь, если есть другой класс, который наследует ViewController класс, то это свойство будет получить унаследованную в ChildViewController в соответствии с его спецификатора доступа.
- Если вы хотите полностью скрытую собственность или переменную. Подобно тому, что он даже не используется вне этого класса, вы можете объявить его в файле реализации (.m) в самой частной категории. В ViewController.m файле:
@interface ViewController() {
NSString *myString;
}
Таким образом, это будет иметь видимость в .m файл только, больше нигде.
Теперь объявление @property
- Вам необходимо объявить это только тогда, когда вам требуются методы по умолчанию для setter-getter (например, setMyString и т. Д.). Это также можно объявить как в .h, так и в .m в соответствии с вашим требованием видимости этого экземпляра.
Надеюсь, теперь вы получаете концепцию. Это все о видимости.
IBOutlets применимы только к объектам. Очень мало нужно использовать iVars в заголовке вашего класса, либо поместите его в расширение класса, либо в свою @implementation. –
Можете уточнить свой отзыв, пожалуйста? Что такое iVar? Плюс: мне всегда говорили/показывали, чтобы объявить атрибуты класса в '.h'. Вы только имеете в виду, что если есть свойство @, то мне не нужно объявлять атрибут раньше? – Colas
@ RichardJ.RossIII, в то время как я nitpicking, ваше первое предложение неверно. IBOutlets можно использовать для украшения переменной экземпляра, даже без соответствующего '@ property'. Это был обычный (единственный) способ сделать что-то в pre-Objective-C 2.0 и все еще работает. 100% согласны с вашим вторым предложением. –