ios开发专题

iOS 基础知识回顾

2018-09-30  本文已影响2人  zl520k

我们开发的时候,定义变量的时候,会给变量定义响应的属性。

在ARC情况下,默认属性有:atomic,readwrite,如果是指针类型默认:strong,简单变量:assign。

在MARC情况下,默认属性有:atomic,readwrite,如果是指针类型默认:retain,简单变量:assign。

其中还有其他的属性,例如:retain,nonatomic,readonly,weak,unsafe_unretained,copy。

当在MARC情况下,atomic,nonatomic,readwrite,readonly,retain,copy,assign都可以使用。

在ARC情况下,在MARC下又增加strong,unsafe_unretained,weak属性。

注意,在ARC情况下,定义Block对象时,strong和copy效果是一样,现在定义Block的时候,都是写成copy属性,如果写成strong,效果和copy一样的。

以下一些说法,都是在ARC情况下,

@property NSUInteger costLimit;

//默认是atomic, readwrite,assign

@property (nonatomic, copy) NSString *carNo;

//nonatomic,readwrite,copy,其中注意,在赋值的时候,要执行拷贝操作

atomic:原子操作,提供多线程安全操作,相当于加了无形锁操作,但也不是绝对安全。

nonatomic:非原子操作,禁止多线程,提高性能。

readwrite:读写权限

readonly: 只读权限,如果不想把变量在外部修改,定义这个属性,防止外部修改,只用本类中修改这个变量。

assign:简单变量定义。

retain和strong、copy都是针对的指针变量,将拥有指针的所有权。

weak:没有拥有指针的所有权,当指向它的变量释放的时候,weak定义的变量,也将自动释放。

unsafe_unretained:没有拥有指针的所有权,当指向它的变量释放的时候,unsafe_unretained定义的变量,不会自动释放。这个属性定义的变量,在使用的时候,要检查指向它的变量是否已经释放,如果释放,在使用,程序会崩溃的。

nullable:表示变量可以null或者nil。

nonnull:表示变量不能为空。

NS_ASSUME_NONNULL_BEGIN与NS_ASSUME_NONNULL_END之间定义的变量都是nullable,如果不想为nullable,必须定义nonnull标记了。

null_unspecified :不确定是否为空。

null_resettable setter 可以为空, getter 不为空。

上一篇下一篇

猜你喜欢

热点阅读