Tag: 惰性评估

iOS lazy var UIBarButtonItem目标问题

当使用lazy var初始化时,我无意识地发现了这个UIBarButtonItem目标问题。 class ViewController: UIViewController { lazy var barButtonItem1 = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(action1)) lazy var barButtonItem2: UIBarButtonItem = { let barButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(action2)) return barButtonItem } override func viewDidLoad() { super.viewDidLoad() print(barButtonItem1.target, barButtonItem2.target) } } 打印结果显示barButtonItem1.target为零,而barButtonItem2.target为自己,这看起来很疯狂! 当我使用barButtonItem1的lazy var写入时,我得到了这个问题,然后我发现barButtonItem1的动作永远不会被调用,最后问题是barButtonItem1.target为零。 我不知道为什么会发生这种情况,但是我很确定这是一个错误。 有没有人知道这件事? 如果你能解释一下,我会非常感激。