码迷,mamicode.com
首页 > 编程语言 > 详细

swift中闭包 OC中Block 解决循环引用

时间:2015-07-07 00:44:33      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

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)"

    }()

swift中闭包 OC中Block 解决循环引用

标签:

原文地址:http://www.cnblogs.com/weijingyun/p/4625739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!