属性跟成员变量的联系

属性

声明一个属性:

@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

你可能感兴趣的:(属性跟成员变量的联系)