使用NSInvocation、NSNotificationCentre还是Delegate方法,哪个更好?

6
在整个项目中,哪种方法更好用于将数据从一个类流向另一个类?
- NSInvocation - NSNotificationCenter - delegate 方法
还是其他我不知道的方法?

@Veelian -- 但它也有限制,对吧? - Pranjal Bikash Das
1
与通知中心相同的家族,键值观察在某些情况下非常有用,如果您希望一个或多个对象自动响应另一个对象的属性更改。 - Guillaume
4个回答

7
他们都存在是因为它们都有不同的用途。简要介绍如下: NSInvocation 向一个对象发送抽象消息,带上可选参数,表示为一个对象。不经常使用,特别是自从引入块后。
也可以用作一种方便的方式来避免创建NSOperation子类(请参见NSIvocationOperation)。 NSNotificationCenter 向任意数量的未知“监听器”广播消息。一对多。广播者不需要了解听众。包括用户信息字典以获取补充信息。这是最沉重/最慢的,不需要频繁使用,但常常用于方便。
在许多情况下,代理方法已足够替代。 代理方法 通常是一种抽象对象,通常采用特定的协议。一对一的关系。通常是处理动作而不是子类化的常见方法。

或通过我不知道的其他方法??

(^)也可以用作回调/处理程序,通常作为替换NSInvocations的更安全的选择。

1

如果您只想与一个对象交流,请使用委托。例如,tableView 有一个委托 - 只有一个对象应该负责处理它。

如果您想告诉所有人发生了什么事情,请使用通知。例如,在低内存情况下,会发送一个通知告诉您的应用程序已经出现了内存警告。因为您的应用程序中的许多对象可能希望降低其内存使用率,所以这是一个通知。

希望对您有所帮助。


明白了..但是 NSInvocation 怎么处理呢? - Pranjal Bikash Das
1
NSInvocation在你想要在不同的时间点向一个对象发送消息,或者多次发送相同的消息时非常有用。NSInvocation允许你描述你将要发送的消息,然后在以后调用它(实际上将其发送到目标对象)。 - Anshuk Garg

1
只是为了补充其他人写的东西,NSInvocation并不属于这个类别,它只是存储方法调用及其参数和可能的目标。它被NSNotificationCeter用于完成其工作。

这是关于NSNotificationCentre行为的特定方式..对吗? - Pranjal Bikash Das
NSInvocation在NSNotificationCenter中不存在,但它们可以在许多地方使用。它们还用于进程间通信,可能被NSTimers使用,NSInvocation只是一种表示方法调用及其方法选择器和参数的方式。NSNotificationCenter可能在内部使用NSInvocation,但谁知道呢。 - Nathan Day

0

我使用委托。它在各个平台上都是可移植的,并且更紧密(不需要全部通过中央调度系统)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接