//写法一、 Swfit中的循环引用问题 (更安全) 可选项
loadData{ [weak self] ( ) ->( ) in
print (self?.view) //这里的self是弱引用了。
}
//写法二 (不够安全) 不可选项
//表示闭包中的self ,不做强引用,但是如果对象被释放,地址保留。
//如果self 真的被释放, 执行到此处,会报野指针
//类似于OC中定义assign属性
loadData{ [unowned self] ( ) ->( ) in
print (self?.view)
}
//老式的闭包方式 (模仿OC)
weak var weakSelf = self
loadData{ ( ) ->( ) in
// ?表示weakSelf有可能为nil ,当前代码不会出现,但是确实存在可能
// 使用?一旦wekSelf已经被释放, 后续代码不会执行,不会奔溃
//推荐使用 ?
//! 表示程序员认为 weakSelf 一定有值,一旦wakSelf被释放,程序会崩溃
print(weakSelf?.view)
}
loadData{ [weak self] ( ) ->( ) in
print (self?.view) //这里的self是弱引用了。
}
//写法二 (不够安全) 不可选项
//表示闭包中的self ,不做强引用,但是如果对象被释放,地址保留。
//如果self 真的被释放, 执行到此处,会报野指针
//类似于OC中定义assign属性
loadData{ [unowned self] ( ) ->( ) in
print (self?.view)
}
//老式的闭包方式 (模仿OC)
weak var weakSelf = self
loadData{ ( ) ->( ) in
// ?表示weakSelf有可能为nil ,当前代码不会出现,但是确实存在可能
// 使用?一旦wekSelf已经被释放, 后续代码不会执行,不会奔溃
//推荐使用 ?
//! 表示程序员认为 weakSelf 一定有值,一旦wakSelf被释放,程序会崩溃
print(weakSelf?.view)
}
本文深入探讨Swift中的循环引用问题,并对比了几种不同的解决方案,包括使用弱引用([weak self])、非拥有引用([unowned self])及传统的弱变量声明方式。通过具体示例,帮助开发者理解如何避免内存泄漏。
1448

被折叠的 条评论
为什么被折叠?



