代表团超过类别

pa1*_*a12 2 iphone delegation objective-c categories

任何人都可以区分我们何时使用委托而不是类别,反之亦然.我清楚这一点.

谢谢

Tom*_*zak 5

Category允许在类上添加新方法或覆盖现有方法,从而允许在不进行子类化的情况下扩展类.添加方法是最有用的目标,如果你不确切地知道被扩展的类是什么,那么覆盖可能会出错.

它更像是一种语言特征,而不是一种模式,它适用于每一个类.

委托是一种模式而不是语言特征,应该使用的类应该为它编码,否则它将无法工作.

通常,委托人将被要求实现将要接收委托的类已知的协议.然后,该类将使用委托来执行其编码的内容,其中一些最常见的是使用策略模式的一部分发送通知,即在代码的某些部分中询问问题以根据具体委托的实现做出决策,让委托执行一个动作或它们的任意组合.

例如,UIApplicationDelegate是notification(application:didFinishLaunchingWithOptions:)和action(application:openURL:sourceApplication:annotation:)协议,UITextFieldDelegate是notification(textFieldDidBeginEditing:)和strategy(textField:shouldChangeCharactersInRange:replacementString:).

实际上我可以想象使用类别来实现我在上面提到的所有这些情况下的委托:发送通知,做行动,参与策略.但它需要你非常好地知道扩展类正在做什么,可能要有代码,否则你可以很容易地破坏类或被更改的类实现打破.所以这种用法在我看来是非常错误的.