Objective c cfNotificationCenter移除观察者观察者
在中,我看到可以使用空的观察者指针将观察者注册到通知。但是,这两个remove方法都需要不为NULL的有效指针值。如果没有注册,我如何克服这一问题 我还注意到,在这个答案示例中,删除是使用NULL完成的,但根据引用,这是错误的 那么,使用NULL observer删除注册的正确方法是什么呢? 它们是否不应该被删除(它们只是留在那里,直到由于应用程序退出而清除内存Objective c cfNotificationCenter移除观察者观察者,objective-c,macos,Objective C,Macos,在中,我看到可以使用空的观察者指针将观察者注册到通知。但是,这两个remove方法都需要不为NULL的有效指针值。如果没有注册,我如何克服这一问题 我还注意到,在这个答案示例中,删除是使用NULL完成的,但根据引用,这是错误的 那么,使用NULL observer删除注册的正确方法是什么呢? 它们是否不应该被删除(它们只是留在那里,直到由于应用程序退出而清除内存 任何解释都将不胜感激 发送观察者没有真正的惩罚(这是一个无效*,系统根本不解释)。首选用例是,如果要删除观察者,则应向初始的CFNot
任何解释都将不胜感激 发送观察者没有真正的惩罚(这是一个
无效*
,系统根本不解释)。首选用例是,如果要删除观察者,则应向初始的CFNotificationCenterAddObserver
调用和后续的CFNotificationCenterRemoveObserver
发送观察者
举例来说,似乎将NULL同时传递给Add和Remove实际上是可行的,但正如您所指出的,这样做会破坏API契约,因此我不建议在发布代码中使用它
observer
本身通常只是一个字符串指针,只要传入同一个指针,就可以了
char *myObserver="anObserver";
CFNotificationCenterAddObserver ( notificationCenter, (void*)myObserver, myCallback, NULL, NULL, CFNotificationSuspensionBehaviorDrop);
后来:
CFNotificationCenterRemoveObserver ( notificationCenter, (void*)myObserver, NULL, NULL);
确保使用相同的字符串指针,而不是只使用同一个字符串,因为基金会只检查 Value*/Cuff>的相等性,它对内容一无所知。
作为进一步解释,此模式的原因是,您可以使用一个回调来处理多个观察者。
发送观察者没有实际的惩罚(这是一个无效*
,系统根本不解释)。首选用例是,如果要删除观察者,则应向初始的CFNotificationCenterAddObserver
调用和后续的CFNotificationCenterRemoveObserver
发送观察者
举例来说,似乎将NULL同时传递给Add和Remove实际上是可行的,但正如您所指出的,这样做会破坏API契约,因此我不建议在发布代码中使用它
observer
本身通常只是一个字符串指针,只要传入同一个指针,就可以了
char *myObserver="anObserver";
CFNotificationCenterAddObserver ( notificationCenter, (void*)myObserver, myCallback, NULL, NULL, CFNotificationSuspensionBehaviorDrop);
后来:
CFNotificationCenterRemoveObserver ( notificationCenter, (void*)myObserver, NULL, NULL);
确保使用相同的字符串指针,而不是只使用同一个字符串,因为基金会只检查 Value*/Cuff>的相等性,它对内容一无所知。
为了进一步解释,这种模式的原因是,您可以使用一个回调来处理多个观察者。
谢谢您的回答。然而,我仍然无法理解设置无法删除的空观察者背后的逻辑。我有一个由另一个开发人员编写的代码,它注册了空观察者。我无法添加已分配的通知,现在没有位置可以删除通知,因此…我不确定这里有什么难以理解的地方。向空观察者注册基本上会使它在应用程序退出之前无法删除。虽然接受空值,但不建议使用空值。你说的“我无法添加指定的”是什么意思?除了苹果的逻辑之外,我完全理解它。不能添加一个指定的,我的意思是它在代码的一部分,我不能更改。正如您所说的,在应用程序退出之前,通知一直保留在那里。再次感谢,我会接受你的回答:)谢谢你的回答。然而,我仍然无法理解设置无法删除的空观察者背后的逻辑。我有一个由另一个开发人员编写的代码,它注册了空观察者。我无法添加已分配的通知,现在没有位置可以删除通知,因此…我不确定这里有什么难以理解的地方。向空观察者注册基本上会使它在应用程序退出之前无法删除。虽然接受空值,但不建议使用空值。你说的“我无法添加指定的”是什么意思?除了苹果的逻辑之外,我完全理解它。不能添加一个指定的,我的意思是它在代码的一部分,我不能更改。正如您所说的,在应用程序退出之前,通知一直保留在那里。再次感谢,我会接受你的回答:)