OC中类的属性变量、成员变量

2016-07-20  本文已影响423人  3a169b0787bc

一直不是特别清楚属性与成员变量的区别。自己写代码的时候都是直接
@property (nonatomic, strong) Class * name;
私有的变量就写在.m文件里,公开的就声明在.h文件里。但是公司里有许多旧工程都是既声明了成员变量还同事写了属性。为了弄明白他们的区别,就查阅了一些资料。、

Objective-C的属性和成员变量用法及关系浅析
Objective-C 编程语言官网文档(五)-属性的声明
属性(property)与成员变量(ivar)有什么区别

讲的都很细致,但是还是有点晕。感觉最细致的就是这段了。这段是sunny大神发布的面试题@property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的。
然后作答时由iOS程序犭袁解答的。
@property 的本质是什么?
@property = ivar + getter + setter;
下面解释下:
“属性” (property)有两大概念:ivar(实例变量)、存取方法(access method = getter + setter)。
“属性” (property)作为 Objective-C 的一项特性,主要的作用就在于封装对象中的数据。 Objective-C 对象通常会把其所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”(access method)来访问。其中,“获取方法” (getter)用于读取变量值,而“设置方法” (setter)用于写入变量值。这个概念已经定型,并且经由“属性”这一特性而成为Objective-C 2.0的一部分。 而在正规的 Objective-C 编码风格中,存取方法有着严格的命名规范。 正因为有了这种严格的命名规范,所以 Objective-C 这门语言才能根据名称自动创建出存取方法。其实也可以把属性当做一种关键字,其表示:
编译器会自动写出一套存取方法,用以访问给定类型中具有给定名称的变量。 所以你也可以这么说:
@property = getter + setter;
例如下面这个类:
@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
@end
上述代码写出来的类与下面这种写法等效:

@interface Person : NSObject

上一篇下一篇

猜你喜欢

热点阅读