我是iOS的新手,并且从教程和我的教授那里学习
在我们的.h
文件中:
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UILabel *myResponse;
@property (strong, nonatomic) IBOutlet UITextField *myInput;
@end
在我们的.m
文件中:
@sysnthesize myResponse
@synthesize myInput
我的问题是:在.m
文件中添加@synthesize
然后使用[myInput <do something here>]
等属性与消除@synthesize
之间的区别有什么不同使用[self.myInput <do something here>]
。我在Xcode 5上运行,所以我知道我有自动合成功能,但两者之间是否有更微妙的区别?
我的教授使用了@synthesize
,而我正在使用的教程只是使用self.propertyName
,因此我很好奇。
感谢。
答案 0 :(得分:5)
您不再需要明确使用@synthesize
作为属性。如果你的教授正在使用它,那只是要明确并展示在幕后发生的事情。
如果您的属性在.h文件中定义,则会自动生成访问器,更改器和实例变量。如果您明确@synthesize
这些属性,则可以通过指令后提供的任何ivar名称访问它们。如果未使用@synthesize
,则可以通过_somePropertyName
自动生成的ivars。
在您的示例中,使用@synthesize
,可以通过实例变量myResponse
访问myResponse
UILabel。如果没有@synthesize
,则可以通过_myResponse
获取。在这两种情况下,都可以通过self.myResponse
获得。最佳实践是在任何生命周期方法,访问器或更改器(-viewDidLoad
,-viewWillAppear
,-setMyResponse:
等)中使用实例变量,并在所有其他方法中使用self.propertyName
清楚地区分类的属性和实例变量。