Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c cfNotificationCenter移除观察者观察者_Objective C_Macos - Fatal编程技术网

Objective c cfNotificationCenter移除观察者观察者

Objective c cfNotificationCenter移除观察者观察者,objective-c,macos,Objective C,Macos,在中,我看到可以使用空的观察者指针将观察者注册到通知。但是,这两个remove方法都需要不为NULL的有效指针值。如果没有注册,我如何克服这一问题 我还注意到,在这个答案示例中,删除是使用NULL完成的,但根据引用,这是错误的 那么,使用NULL observer删除注册的正确方法是什么呢? 它们是否不应该被删除(它们只是留在那里,直到由于应用程序退出而清除内存 任何解释都将不胜感激 发送观察者没有真正的惩罚(这是一个无效*,系统根本不解释)。首选用例是,如果要删除观察者,则应向初始的CFNot

在中,我看到可以使用空的观察者指针将观察者注册到通知。但是,这两个remove方法都需要不为NULL的有效指针值。如果没有注册,我如何克服这一问题

我还注意到,在这个答案示例中,删除是使用NULL完成的,但根据引用,这是错误的

那么,使用NULL observer删除注册的正确方法是什么呢? 它们是否不应该被删除(它们只是留在那里,直到由于应用程序退出而清除内存


任何解释都将不胜感激

发送观察者没有真正的惩罚(这是一个
无效*
,系统根本不解释)。首选用例是,如果要删除观察者,则应向初始的
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>的相等性,它对内容一无所知。


为了进一步解释,这种模式的原因是,您可以使用一个回调来处理多个观察者。

谢谢您的回答。然而,我仍然无法理解设置无法删除的空观察者背后的逻辑。我有一个由另一个开发人员编写的代码,它注册了空观察者。我无法添加已分配的通知,现在没有位置可以删除通知,因此…我不确定这里有什么难以理解的地方。向空观察者注册基本上会使它在应用程序退出之前无法删除。虽然接受空值,但不建议使用空值。你说的“我无法添加指定的”是什么意思?除了苹果的逻辑之外,我完全理解它。不能添加一个指定的,我的意思是它在代码的一部分,我不能更改。正如您所说的,在应用程序退出之前,通知一直保留在那里。再次感谢,我会接受你的回答:)谢谢你的回答。然而,我仍然无法理解设置无法删除的空观察者背后的逻辑。我有一个由另一个开发人员编写的代码,它注册了空观察者。我无法添加已分配的通知,现在没有位置可以删除通知,因此…我不确定这里有什么难以理解的地方。向空观察者注册基本上会使它在应用程序退出之前无法删除。虽然接受空值,但不建议使用空值。你说的“我无法添加指定的”是什么意思?除了苹果的逻辑之外,我完全理解它。不能添加一个指定的,我的意思是它在代码的一部分,我不能更改。正如您所说的,在应用程序退出之前,通知一直保留在那里。再次感谢,我会接受你的回答:)