Swift 之属性篇
Swift 中的属性和在 ObjC 中有所不同,具体表如下:
消除了诸如: atomic
, nonatomic
, readonly
, weak
, strong
, assign
, setter
, getter
, nullable
, nonnull
等修饰符,但这些特性并未消失,而是通过其他途径简化这些特性对开发者带来的输入量。
内存管理 weak/strong/assign
取而代之的是 Swift 用自动内存管理取代了 weak
, strong
, assign
。
类等引用类型的变量,一律为 strong 类型,并且 Swift 自身摈除了循环引用的问题,省略了 weak。
结构,枚举,字符串,数字等值类型,传递方式为直接内存复制,考虑到效率也用到了CoW机制。
是否为空 nullable/nonnull
通过 var / let 限定符和 ? ! 解包操作符,变量在定义时就能确定是否为 nullable 还是 nonnull。
观察者方法 set / get
Swift 增加了计算值属性的 get 和 set 观察者方法,形式如下:
class Person {
private var _name
var name {
get {
return _name
}
set(newValue) {
_name = newValue
}
}
}
对于 atomic / nonatomic
Swift 中的属性默认是 nonatomic,如果需要 atomic 属性,可以通过加锁的方式
class Person {
var _name: String?
let _name_lock = NSLock()
var name {
get {
var value: String?
_name_lock.lock()
value = _name
_name_lock.unlock()
return _name
}
set(newValue) {
_name_lock.lock()
_name = newValue
_name_lock.unlock()
}
}
}