Swift 3.0 @escaping與@non-escaping區別

@escaping與@non-escaping聲明用來修飾閉包的

@escaping:閉包的生命周期不在傳入的函數范圍內管理,就是說這個閉包是被持有了,比如

Paste_Image.png

在函數return后,閉包并不會被銷毀,它被持有了。因為這個閉包要在異步請求回來后才執行,這時候函數已經return了,為了能執行,必須被其他對象持有

@non-escaping:閉包在函數內執行完后,函數才返回,閉包銷毀,這樣一來,閉包的內存管理就非常清晰了

Paste_Image.png

總結:看到函數的閉包參數被聲明為@escaping的時候,就要考慮self被循環引用的問題,要用unowned self或者weak self了;而如果是@non-escaping的話,就放心使用self吧,因為閉包在函數內執行,會釋放被捕獲的self。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容