Хотя это несколько очень простой вопрос, но у меня есть некоторые сомнения, которые остались после чтения так много документов и вопросов на stackoverflow.com.Почему объявлять некоторые переменные экземпляра в качестве свойств
Я хочу знать, почему объявить некоторые переменные экземпляра в качестве свойств.
MYViewController.h
@interface MyViewController : UIViewController {
UIButton *btn;
NSString *name;
}
@property (nonatomic, retain) UIButton *btn;
@property (nonatomic, retain) NSString *name;
MyViewController.m
@implementation MyViewController
@synthesize btn;
-(void) viewDidLoad()
{
[btn setTitle:@"Hello" forState:UIControlstaeNormal]; //this is first way where there is no need to declare btn as property
[self.btn setTitle:@"Hello" forState:UIControlstaeNormal]; //this is second way where we do need to decalre btn as property as we are accessing it through self
//Setting value of name
name = @"abc"; //this is first way where there is no need to declare name as property
[self setName:@"abc"; //this is second way where we do need to declare name as property as we are accessing its aetter method through self
}
Теперь в приведенном выше коде, я хочу знать, когда мы можем использовать методы геттер/сеттер переменной БТН не объявляя его как собственность то, что необходимо объявить его в собственность и что лучший способ установить значение «имя».
Где-то я читал, что, когда вы хотите, чтобы ваши переменные экземпляра были доступны другим объектам класса, вы должны объявить их как переменные экземпляра. Это единственная ситуация, когда мы должны объявлять их как свойства.
В принципе, я немного смущен тем, в каких ситуациях объявлять переменные экземпляра в качестве свойств.
Просьба предложить. Спасибо заранее.
Thanx для вашего подробного сообщения. Я очень ценю, но, пожалуйста, будьте более конкретными по моему вопросу и в основном двум путаницам, которые задаются с примерами в моем вопросе. – Aisha
@ Киара, пожалуйста. конечно - с этим разъяснением, я думаю, вас больше всего интересует, как получить доступ и установить ваши переменные экземпляра, учитывая контекст в вашем примере viewDidLoad. ('@property (nonatomic, keep) UIButton * btn;' <- эта строка является объявлением свойства). Ответ: поскольку 1) подклассы могут получить доступ к вашим ivars 2) предоставленная вами реализация явно не является потокобезопасной 3) существуют публичные геттеры и сеттеры 4) 'viewDidLoad' использует полностью построенный экземпляр класса (продолжение) – justin
(продолжение) 5) вы не используете частично разрушенный экземпляр 6) метод переопределен и может быть переопределен - я бы получил доступ к свойствам в этом случае – justin