swift中解决循环引用的方法
2016-07-16 20:30
441 查看
//
方法1: OC 的方法
// weakSelf -> ViewController?
// self - ViewController
// 'weak' must be a mutable variable, because it may change at runtime
// weak 的变量在运行时有可能被设置为 nil,weak不能使用 let
// weak var weakSelf = self
// loadData { (result) -> () in
// print(result)
// print(weakSelf)
// }
// 方法2: Swift
的方法 -
首选
// [weak self]
表示 闭包中的 self
都是弱引用的,不需要再使用其他的变量
// weak 的变量在运行时有可能被设置为 nil,所以闭包中的 self,都是可选的
loadData { [weak
self] (result) -> () in
// unexpectedly found nil while unwrapping an Optional value
// ! 强行解包,值不存在抛出异常
// ? 可选解包,值不存在,给nil发送消息
print(self?.view)
}
//
方法3: [unowned self]
// [unowned self]
和 OC 中的 assign
是一样的,对象释放之后,指针保持不变
// 1> 闭包中不需要考虑解包的问题
// 2> 但是如果 self
释放,会出现野指针访问
// loadData { [unowned self] (result) -> () in
// // EXC_BREAKPOINT 野指针访问
// print(self.view)
// }
方法1: OC 的方法
// weakSelf -> ViewController?
// self - ViewController
// 'weak' must be a mutable variable, because it may change at runtime
// weak 的变量在运行时有可能被设置为 nil,weak不能使用 let
// weak var weakSelf = self
// loadData { (result) -> () in
// print(result)
// print(weakSelf)
// }
// 方法2: Swift
的方法 -
首选
// [weak self]
表示 闭包中的 self
都是弱引用的,不需要再使用其他的变量
// weak 的变量在运行时有可能被设置为 nil,所以闭包中的 self,都是可选的
loadData { [weak
self] (result) -> () in
// unexpectedly found nil while unwrapping an Optional value
// ! 强行解包,值不存在抛出异常
// ? 可选解包,值不存在,给nil发送消息
print(self?.view)
}
//
方法3: [unowned self]
// [unowned self]
和 OC 中的 assign
是一样的,对象释放之后,指针保持不变
// 1> 闭包中不需要考虑解包的问题
// 2> 但是如果 self
释放,会出现野指针访问
// loadData { [unowned self] (result) -> () in
// // EXC_BREAKPOINT 野指针访问
// print(self.view)
// }
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- 打印机无法响应的解决方法第1/2页
- C#提示:“在证书存储区中找不到清单签名证书”的解决方法
- Internet Explorer 8 beta 中文版与IE7共存的解决方法
- Oracle数据更改后出错的解决方法
- ON_COMMAND_RANGE多个按钮响应一个函数的解决方法
- VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法
- php采用curl访问域名返回405 method not allowed提示的解决方法
- PHP提示Cannot modify header information - headers already sent by解决方法
- php运行提示:Fatal error Allowed memory size内存不足的解决方法
- php5.3提示Function ereg() is deprecated Error问题解决方法
- C#控件闪烁的解决方法
- php出现web系统多域名登录失败的解决方法
- 一些Asp技巧和实用解决方法
- php使用iconv中文截断问题的解决方法
- IE中鼠标经过option触发mouseout的解决方法
- TinyMCE提交AjaxForm获取不到数据的解决方法
- 二行代码解决全部网页木马