成员变量、属性、实例变量

在 {} 内声明的,都是  成员变量 (实例变量 + 基础类型变量(int float ...) = 成员变量)

成员变量,是类内部使用的,属性变量,可供类外部访问

(现在的做法,.h 中的属性可供类外部使用,.m中私有)

备注:@dynamic,告诉编译器不要主动生成set、get,由进行时来实现存储。如core data 框架在运行时动态添加属性

在早期,定义一个属性,需要用@synthesize告诉编译器自动生成set、get。现在已默认自动生成,无需这么写了。

在Objective-C中,属性关键字用于声明类的属性,指定其访问修饰符、内存管理语义、读写权限等。下面是一些常见的属性关键字:

nonatomic: 表示属性是非原子的,多线程访问时不会进行加锁操作,因此在性能上比原子属性更高效。但是,它不提供线程安全性。

atomic: 表示属性是原子的,多线程访问时会进行加锁操作,确保访问的线程安全性。这是默认的属性关键字,如果不指定任何关键字,属性会被默认为atomic。

strong: 在ARC(Automatic Reference Counting)下,表示属性是强引用,该属性对对象进行拥有和保留,直到该属性被设置为nil或者另一个对象。

weak: 在ARC下,表示属性是弱引用,该属性对对象进行引用,但不会增加其引用计数,当所引用的对象被释放时,属性会自动设置为nil。

assign: 适用于非对象类型的属性,例如基本数据类型(int、float等),表示直接赋值给属性,不进行引用计数的增加或减少。对于对象类型,一般不使用assign,而是使用weak或strong。

copy: 在ARC下,表示属性在设置时会进行一次拷贝操作,将对象复制到一个新的内存地址,以确保属性值的独立性。一般用于属性为字符串或其他可变对象类型时。

readonly: 表示属性只有getter方法,没有setter方法,即只读属性。

readwrite: 表示属性既有getter方法又有setter方法,即可读写属性。这是默认的属性关键字,如果不指定任何关键字,属性会被默认为readwrite。

getter=customGetterName: 指定自定义的属性的getter方法名,用于改变默认的getter方法名。

setter=customSetterName: 指定自定义的属性的setter方法名,用于改变默认的setter方法名。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容