我做了一个快速测试,并试图传递一个闭包作为函数参数,但注意到某种“异常”。这款应用程序没有崩溃,而是一条违规的线路,生成了一个崩溃报告。
ViewController
import UIKit
class MapViewController: UIViewController {
typealias MapTouchHandler = (String) -> Void
var mapTouchHandlers = Array<MapTouchHandler>()
@IBAction func tapGestureAction(_ sender: UITapGestureRecognizer) {
for handler in mapTouchHandlers {
// This line produces this: "0x000000010c8f8a00 Mediator`partial apply forwarder for reabstraction thunk helper from @callee_owned (@in Swift.String) -> (@out ()) to @callee_owned (@owned Swift.String) -> () at MapViewController.swift"
handler("tap recognized")
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
func subscribeMapTouchEvent(mapTouchHandler: @escaping MapTouchHandler) {
// This line produce this: "0x000000010c8ff910 Mediator`partial apply forwarder with unmangled suffix ".16" at Mediator.swift"
mapTouchHandlers.append(mapTouchHandler)
}
}中介类
import UIKit
class Mediator {
var mapViewController: MapViewController? {
didSet {
mapViewController?.subscribeMapTouchEvent(mapTouchHandler: self.handleTouchEvent(str:))
}
}
private func handleTouchEvent(str: String) {
print(str)
}
}感谢任何解决这个问题的洞察力。
发布于 2017-12-22 11:15:33
如果你指的是“自我”,我建议你使用弱自我,这样你就可以避免保留周期,内存泄漏和崩溃。
例如,
getAsynchronousData { [weak self] data in
guard let self = self else { return }
self.yourProperty = data
} 发布于 2018-04-23 03:55:28
请查看苹果开发者论坛的问答。提示:找到可能是nil的变量,并与Objective-C代码相关。我修好了我的窃听器。祝好运!
https://stackoverflow.com/questions/47209733
复制相似问题