Object-C属性认识

ARC下

assgin:最简单的属性,非对象类型可以定义。

weak:不持有对象原始对象被释放后自动置为nil,这也是为什么weak对象不能初始化的原因。

strong:自己持有对象,原始对象被释放以后,自己持有的对象不会有影响

copy:和strong一样也是自己持有对象,但是相当于重写了copy方法。持有的对象会有一片新的内存地址,原始对象改变后不会影响copy的值。例子

        @property(copy)NSString*string;

          -(void)setString:(NSString*)string{

                            self.string=[string copy];

            }

对于不可变对象有可变子类的时候使用copy可以防止值被意外篡改,在setString方法中传入NSMutableString是被允许的,想象一下这时对象是strong属性并且复制的时候没有使用copy方法,那么就会出现string=MutableString;。copy属性可以防止这种情况出现

unsafe_unretained:和weak类似,但是原始对象释放后,并不会置为nil

nonatomic:非原子性,读写速度快于atomic。非多线程情况下都使用nonatomic。因为苹果默认是atomic,所以需要显性设置属性为nonatomic。

atomic:原子性,多线程情况下使用(我暂时没有使用过)

readwrite:可读写

readonly:只读,编译的时候不会生成set方法

注:有写得不对的地方欢迎指正

你可能感兴趣的:(Object-C属性认识)