具体来说,当任务可以使用或不使用选择器进行补充时,是否有任何(客观)理由偏好一种方式而不是另一种方式?
例如,NSTimer可以通过两种方式在一个时间间隔上运行一个方法:
A)使用选择器:
let timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerAction()), userInfo: nil, repeats: true)
dynamic func timerAction() {
print("foo")
}
B)没有选择器:
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
self.timerAction()
}
func timerAction() {
print("foo")
}
两个版本都是完全正常的,所以有任何(客观)理由更喜欢一个版本吗?
答案 0 :(得分:4)
目标/选择器设计是API早期Objective-C遗留下来的行李。
如果Apple今天要重做所有这些API,整个目标/选择器设计将会消失,并且全部被块/闭包取代。新的Apple API支持这一想法。示例 - 旧的UIAlertView
使用了委托。较新的UIAlertController
仅使用闭包/块来进行警报操作。
使用闭包(Swift)或块(Objective-C)比使用目标/选择器方法更受欢迎。
以下是使用目标/选择器的问题:
与所有这些相反的是使用闭包/阻止形式的好处。
随着时间的推移,许多API的委托版本将被弃用并替换为闭包/块版本。如果您有选择,我建议现在使用封闭/阻止表单以避免以后需要更新,更不用说它只是更简单的解决方案。