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 解決循環參考

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.