在 Objective-C 中,property 的关键字可以用来定义类的属性。不同的关键字有不同的含义和用法,下面是一些常见的关键字以及它们的应用和区别:
nonatomic: 表示属性是非原子性的,也就是在多线程环境下访问该属性不会加锁,可能存在线程安全问题。一般来说,如果不涉及到多线程操作,使用 nonatomic 可以提高程序的性能。
atomic: 表示属性是原子性的,也就是在多线程环境下访问该属性会加锁,保证了线程安全。但是由于加锁会影响程序的性能,所以一般情况下不推荐使用。
strong: 表示属性是强引用类型,也就是在对该属性进行赋值时,会对所赋的值进行强引用,当属性被释放时,所引用的对象也会被释放。一般用于持有一个对象。
weak: 表示属性是弱引用类型,也就是对该属性进行赋值时,不会对所赋的值进行强引用,当所引用的对象被释放时,属性的值会被自动赋为 nil。一般用于解决循环引用问题,比如代理对象等场景。
assign: 表示属性是直接赋值类型,也就是对该属性进行赋值时,不会对所赋的值进行强引用或弱引用,只是简单地进行赋值。一般用于基本数据类型的赋值,如 int、float 等。
copy: 表示属性需要进行拷贝操作,也就是对该属性进行赋值时,会创建一个新的对象,并将该对象的指针赋值给属性。一般用于字符串和不可变集合类型的赋值。
readonly: 表示属性只读,也就是只能获取属性的值,不能修改属性的值。
readwrite: 表示属性可读可写,也就是可以获取属性的值,并且可以修改属性的值。默认情况下,所有属性都是可读可写的。
getter=: 表示为属性指定自定义的 getter 方法,也就是将属性名和 getter 方法名进行绑定。
setter=: 表示为属性指定自定义的 setter 方法,也就是将属性名和 setter 方法名进行绑定。
这些关键字可以组合使用,根据不同的情况进行选择。需要注意的是,属性的默认值是 atomic、strong 和 readwrite。如果不需要这些默认值,需要显式地指定其他的关键字。