我正在尝试设置
CALayer
的委托以便使用draw(_:in:)
。文档描述了如何操作。但是,一旦我设置了代理,就会出现运行时错误:
Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
以下是生成错误的代码。在Xcode 8.2.1中替换Single View Application模板中的ViewController.swift
:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myLayer = CALayer()
myLayer.delegate = LayerDelegate()
view.layer.addSublayer(myLayer)
}
}
class LayerDelegate: NSObject, CALayerDelegate {
}
CALayer
的delegate
属性是weak
类型的,所以如果将一个新对象赋值给它,会导致该对象立即被释放。不过,我不确定这是否是你异常的源头... - Robertclass ViewController: UIViewController { let layerDelegate = LayerDelegate() override func viewDidLoad() { ... myLayer.delegate = layerDelegate }}
- Yannickweak
引用实际上是一个unowned
引用,因此您会因为委托被释放而崩溃。 - Cristik