属性
声明一个属性:
@property(nonatomic, strong) NSString *myString;
声明一个成员变量(实例变量):
@interface MyViewController : UIViewController {
NSString*_myString;
}@end
我们声明了一个属性,因为现在我们用的编译器已经是LLVM了,所以不再需要为属性声明实例变量了。
如果LLVM发现一个没有匹配实例变量的属性,它将为你生成以下划线开头的实例变量_myString,不需要自己手动再去写实例变量。
而且也不需要在.m文件中写@synthesizemyString;也会自动为你生成setter,getter方法。
@synthesize的作用就是让编译器为你自动生成setter与getter方法。
那么在.m文件中可以直接使用_myString实例变量,也可以通过属性self.myString。两者都是一样的,只不过self.myString是通过调用_myString的setter/getter方法。
@synthesize还有一个作用,可以指定与属性对应的实例变量,例如@synthesizemyString= xxxx;那么self.myString其实是操作的实例变量xxxx,而不是_myString了。
分类中用@property定义变量,只会生成变量的getter,setter方法的声明,不能生成方法实现和带下划线的成员变量。有没有解决方案呢?有,通过运行时建立关联引用。
友情链接:
https://blog.csdn.net/fiona_yang123456/article/details/41044979
网友评论