Objective-C的成员变量和属性经常让人产生迷惑性,其实成员变量和属性并不是一样的东西。
@interface Person : NSObject
{
NSString *_sex;
}
@property (nonatomic, copy) NSString *name;
@end
定义一个Person类,在类里面分别定一个成员变量_sex和属性name。然后点语法调用_sex和name。
image
当我们用点语法调用_sex,Xcode报错,告诉我们在person中并没有属性_sex,这就说明了_sex并不是属性,而是成员变量。而且我们知道name能用点语法调用,是因为生成了set和get方法。sef.name实际上点用的是set和get方法。_sex并没有生成set和get方法。
我们依据提示修复错误,得到如下结果
image
说明Objective-C里面的成员变量默认@protected修饰的。
- 成员变量:
1. 成员变量的默认修饰是@protected。
2. 成员变量不会自动生成set和get方法,需要自己手动实现。
3. 成员变量不能用点语法调用,因为没有set和get方法,只能使用->调用。
- 属性
1. 属性的默认修饰是@protected。
2. 属性会自动生成set和get方法。
3. 属性用点语法调用,点语法实际上调用的是set和get方法。
现在的开发中已经基本不用成员变量了。
作者:wjam小涛涛
链接:https://www.jianshu.com/p/99251e21a363
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。










网友评论