swift中閉包 OC中Block 解決循環參考

來源:互聯網
上載者:User

標籤:

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,更安全

[weakself] 時時監控效能較差,[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 解決循環參考

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.