Swift 中的闭包循环引用
2016-02-17 12:42
387 查看
/*
闭包 与 OC 中的 Block 类似,
闭包主要用于异步操作执行完成后的代码回调,网络访问结果以参数的形式传递给调用方
闭包类似于 OC 中的
Block
* 预先定义好的代码
* 在需要时执行
* 可以当作参数传递
* 可以有返回值
* 包含
self时需要注意循环引用
1.提前准备好的一段可以执行的代码
2.可以当做参数传递
3.在需要的时候 执行闭包
4.在闭包中 访问 self 可能会出现循环引用
*/
import UIKit class ViewController: UIViewController { //记录闭包内容,将闭包作为了属性,而属性默认就是强引用 var finish : ((dataStr : String)->())? override func viewDidLoad() { super.viewDidLoad() //swift 中的循环引用 //闭包就是OC中的block test2() } func test3() { //闭包循环引用的解决方法 //2.swift 的方法二. //unowned 相当于 OC 中的 assign //[unowned self] `self`不是可选项 表示在闭包中的self对象被回收时,其指针并不会指向nil. 会有风险,造成坏地址访问,也就是野指针错误 loadData { [unowned self] (dataStr) -> () in ////最好将!换成?,这样的话如果为 nil 就不会执行任何操作 print("\(dataStr)----\(self.view)") } } func test2() { //闭包循环引用的解决方法 //2.swift 的方法一. //weak 有机会会指向 nil //[weak self] `self`是可选项 表示在闭包中 self 都是弱引用的 //与 OC 中的 weak 作用一样 --> __weak loadData { [weak self] (dataStr) -> () in ////最好将!换成?,这样的话如果为 nil 就不会执行任何操作 print("\(dataStr)----\(self?.view)") } } func test1() { //闭包循环引用的解决方法 //1.OC 的方法 weak var weakSelf = self loadData { (dataStr) -> () in // print("\(dataStr)----\(weakSelf!.view)") //最好将!换成?,这样的话如果为 nil 就不会执行任何操作 print("\(dataStr)----\(weakSelf?.view)") } } func loadData(finish:(dataStr : String)->()) { self.finish = finish //闭包就是OC中的block dispatch_async(dispatc 8e48 h_get_global_queue(0, 0)) { () -> Void in // dispatch_async(dispatch_get_main_queue(), { () -> Void in //主线程操作 self.working() }) } } func working(){ self.finish!(dataStr: "swift中的闭包就是 block") } //析构函数,相当于 delloc deinit { print("viewController Die") } }
相关文章推荐
- Swift 单例与懒加载
- swift 中cell 自适应label高度
- swift27个开元第三方库
- OC与Swift随机函数的区别
- Swift添加Preprocessor Macros
- ios开发中的Swift面向对象
- ios开发中的Swift面向对象
- 《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
- 《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
- swift初见
- swift storyboard 跳转的2 种方式
- swift 可选(optional)
- 常量和变量——swift学习笔记(1)
- 推荐几个swift学习网站
- Swift语法_函数类型
- swift 之设计模式 适配器
- swift之Button基础
- swift
- Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
- Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结