Objective-C的成员变量和属性经常让人产生迷惑性,其实成员变量和属性并不是一样的东西。
@interface Person : NSObject
{
NSString *_sex;
}
@property (nonatomic, copy) NSString *name;
@end
定义一个Person
类,在类里面分别定一个成员变量_sex
和属性name
。然后点语法调用_sex
和name
。
当我们用点语法调用
_sex
,Xcode报错,告诉我们在person
中并没有属性_sex
,这就说明了_sex
并不是属性,而是成员变量。而且我们知道name
能用点语法调用,是因为生成了set
和get
方法。sef.name
实际上点用的是set
和get
方法。_sex
并没有生成set
和get
方法。
我们依据提示修复错误,得到如下结果
说明Objective-C里面的成员变量默认
@protected
修饰的。
- 成员变量:
1. 成员变量的默认修饰是@protected。
2. 成员变量不会自动生成set和get方法,需要自己手动实现。
3. 成员变量不能用点语法调用,因为没有set和get方法,只能使用->调用。
- 属性
1. 属性的默认修饰是@protected。
2. 属性会自动生成set和get方法。
3. 属性用点语法调用,点语法实际上调用的是set和get方法。
现在的开发中已经基本不用成员变量了。
网友评论