标签:
OC 中 全局宏定义
#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
用法如下:
WS(weakself)
[self.tableView addHeaderWithCallback:^{
[weakself requestMemberList];
}];
swift 在比闭包 中使用 weakSelf
weak var weakSelf = self
demo4 {
// 使用?的好处 就是一旦 self 被释放,就什么也不做
weakSelf?.view.backgroundColor =
UIColor.redColor()
}
这才是高级方法:
swift 中一个类可以嵌套定义另外类,新增加的类只能被当前类使用
在 swift 中,要解除闭包的 循环引用,可以在闭包定义中使用 [unowned self] 或者 [weak self],其中:
[unowned self] 类似与 OC 中的 unsafe_unretained,如果对象被释放,仍然保留一个 无效引用,不是可选项
[weak self] 类似与 OC 中的 __weak,如果对象被释放,自动指向 nil,更安全
[weak self] 时时监控性能较差,[unowned self]可能导致野指针错误,如果能够确定对象不会被释放,尽量使用 unowned
例子 懒加载的闭包
lazy var printName: ()->() = { [unowned self] in
print(self.name)
}
// 下面这句不会发生发生循环引用因为执行完就会消失
lazy var title: String = {
print(self.name)
return "Mr. \(self.name)"
}()
标签:
原文地址:http://www.cnblogs.com/weijingyun/p/4625739.html