gpt4 book ai didi

ios - 如何在 Swift 中设置对闭包/函数的弱引用?

转载 作者:IT王子 更新时间:2023-10-29 05:23:02 24 4
gpt4 key购买 nike

HMSegmentedControl 中,我想将 segmentedControl.indexChangeBlock 设置为一个实例方法来处理操作。官方的例子是:https://github.com/HeshamMegid/HMSegmentedControl/blob/master/HMSegmentedControlExample/HMSegmentedControlExample/ViewController.m (第 63 ~ 68 行),但那是 Objective-C。

在 Swift 中,函数是一等公民。所以我想为这个 block 属性设置一个实例方法。
但是我的代码会导致循环引用,看来我应该定义一个弱引用:

class ExampleVC: UIViewController {
var segmentedControlIndex: Int = 0

override func viewDidLoad() {
let segmentedControl3 = HMSegmentedControl(sectionImages: ... , sectionSelectedImages: ... )
segmentedControl3.frame = ...
segmentedControl3.indexChangeBlock = someInstanceMethod
}

func someInstanceMethod(index: Int) {
segmentedControlIndex = index
}
}

但是,我不能定义对非类类型的弱引用。我能做些什么?这样做合法吗?

最佳答案

[unowned self] 很危险。它的作用是告诉运行时“假设 self 还没有被释放,不用担心检查。”如果 self 同时被释放,您的应用程序将发生 SEGFAULT。

在这种情况下,{ [weak self] in self?.someInstanceMethod($0) } 将打破引用循环,并变成一个no-op if self 被释放。

[weak self] 始终是安全的,而 [unowned self] 如果您修改代码的其他 区域(例如 View 层次结构)...

关于ios - 如何在 Swift 中设置对闭包/函数的弱引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com