最佳方式
我的情况:最佳方式
ClassA
可能会或可能不会有ClassB
类型的父母。所以说[instanceOfA.superview somethingClassBSpecific];
是一半的危险。另外,Xocde会很有理由的,会变得不安分。
这里是建议派遣的通知,还是在上海华一些逻辑,例如,
if([objectOfA.superview respondsToSelector:somethingClassBSpecific] != nil){
//...
}
或者创建ClassB
在情况允许的类型的委托?
正如通常的情况一样,这取决于。使用视图层次结构,通知和委派是对象可以相互通信的三种不同方式。确定哪些(如果有的话)是最合适的,需要考虑有问题的对象是如何相互关联的。
通知提供了非常松散(几乎为零)的对象之间的耦合。它们还提供一对多通信 - 发布通知,并且每个侦听该通知的对象都会收到该消息。但通知并不总是合适的;沟通主要是单向的,滥用通知机制会导致性能问题。
委派给你一种自定义对象行为的方法。最明显的例子是应用程序委托。大多数iOS应用程序都基于相同的类:UIApplication。每个应用程序的UIA应用程序都是一样的,即使每个应用程序都有自己的功能。应用程序对象使用委托来提供给应用程序独特行为的定制。
视图层次结构是(某些)对象相互连接的另一种方式。如果您正在实施的行为是)视图的一部分,并且b)依赖于该视图与其他视图的关系,那么使用superview
和subviews
属性可能是有意义的。
那么,你试图实现什么样的功能?
这取决于你的逻辑模型。如果您有一个使用可选方法实现协议的类的实例,那么当您尝试调用其中一种可选方法时,使用respondsToSelector:
是适当的。如果你想要你调用的方法是必需的,那么在你传递的类中创建一个什么都不做的“警卫”。这两种技术都是有效的,这只是一个问题,你是否希望你的用户意识到需要实现一个特定的方法。