i日久生。。。

iOS中成员变量和属性

2017-12-18  本文已影响362人  wjam小涛涛

Objective-C的成员变量和属性经常让人产生迷惑性,其实成员变量和属性并不是一样的东西。

@interface Person : NSObject
{
    NSString *_sex;
}
@property (nonatomic, copy) NSString *name;
@end

定义一个Person类,在类里面分别定一个成员变量_sex和属性name。然后点语法调用_sexname

屏幕快照 2017-12-18 下午10.17.42.png
当我们用点语法调用_sex,Xcode报错,告诉我们在person中并没有属性_sex,这就说明了_sex并不是属性,而是成员变量。而且我们知道name能用点语法调用,是因为生成了setget方法。sef.name实际上点用的是setget方法。_sex并没有生成setget方法。

我们依据提示修复错误,得到如下结果

屏幕快照 2017-12-18 下午10.24.48.png
说明Objective-C里面的成员变量默认@protected修饰的。
  1. 成员变量:
1. 成员变量的默认修饰是@protected。
2. 成员变量不会自动生成set和get方法,需要自己手动实现。
3. 成员变量不能用点语法调用,因为没有set和get方法,只能使用->调用。
  1. 属性
1. 属性的默认修饰是@protected。
2. 属性会自动生成set和get方法。
3. 属性用点语法调用,点语法实际上调用的是set和get方法。

现在的开发中已经基本不用成员变量了。

上一篇下一篇

猜你喜欢

热点阅读