Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 在何处将对象注册为通知侦听器?-最大化性能!_Objective C_Cocoa_Performance_Notifications - Fatal编程技术网

Objective c 在何处将对象注册为通知侦听器?-最大化性能!

Objective c 在何处将对象注册为通知侦听器?-最大化性能!,objective-c,cocoa,performance,notifications,Objective C,Cocoa,Performance,Notifications,有更好的地方可以将对象注册到通知中心吗 换句话说,就性能而言,将对象注册为init、awakeFromNib或其他事件处理程序中的通知侦听器是一种很好的做法 谢谢 通过在不同的时间注册通知,您实际上不会发现任何性能差异。我能给你的唯一建议是将观察通知的窗口缩小到尽可能短的时间。此外,请确保只注册一次观察者。如果您多次注册一个观察者,您将收到多个通知 为什么您如此关注通知的性能?您是否已通过测量确认通知导致了问题?通过在不同时间注册通知,您实际上不会发现任何性能差异。我能给你的唯一建议是将观察通知

有更好的地方可以将对象注册到通知中心吗

换句话说,就性能而言,将对象注册为init、awakeFromNib或其他事件处理程序中的通知侦听器是一种很好的做法


谢谢

通过在不同的时间注册通知,您实际上不会发现任何性能差异。我能给你的唯一建议是将观察通知的窗口缩小到尽可能短的时间。此外,请确保只注册一次观察者。如果您多次注册一个观察者,您将收到多个通知


为什么您如此关注通知的性能?您是否已通过测量确认通知导致了问题?

通过在不同时间注册通知,您实际上不会发现任何性能差异。我能给你的唯一建议是将观察通知的窗口缩小到尽可能短的时间。此外,请确保只注册一次观察者。如果您多次注册一个观察者,您将收到多个通知


为什么您如此关注通知的性能?您是否已通过测量确认通知导致了问题?

在代码正常工作之前,不要担心性能问题,您可以观察和测量可能存在的任何性能问题。注册观察者是一件非常罕见的事情,因此在这样做时不应该涉及重大的性能问题。重要的是您为通知注册了多少对象以及发送了多少通知,因为发布通知涉及散列查找。

在代码正常运行之前,不要担心性能问题,您可以观察和测量可能存在的任何性能问题。注册观察者是一件非常罕见的事情,因此在这样做时不应该涉及重大的性能问题。重要的是您为通知注册了多少对象以及发送了多少通知,因为发布通知涉及散列查找。

另外,在init方法中使用块作为通知处理程序时要非常小心

例如,可以将块设置为通知处理程序,以侦听来自类属性的通知,例如视图控制器的managedObjectContext上的didChangeNotification。在这种情况下,块将保留对象实例,这意味着您的init方法已将retainCount增加了两次。如果您没有覆盖发布以正确地管理它,那么您将保留类的实例,更糟糕的是,可能仍然会响应这些通知


因此,我会非常小心地使用块作为通知处理程序,特别是从init方法

另外,在init方法中使用块作为通知处理程序时要非常小心

例如,可以将块设置为通知处理程序,以侦听来自类属性的通知,例如视图控制器的managedObjectContext上的didChangeNotification。在这种情况下,块将保留对象实例,这意味着您的init方法已将retainCount增加了两次。如果您没有覆盖发布以正确地管理它,那么您将保留类的实例,更糟糕的是,可能仍然会响应这些通知


因此,我会非常小心地使用块作为通知处理程序,特别是从init方法

谢谢你的回答!是的,我注意到,如果我在每个对象的init方法中注册所有通知,而不是在awakeFromNib或其他处理程序中注册它们,那么加载时间会有一点差异!我问这个问题是想看看是否有人对这个问题有技术上的解释!比特酒:不完全是。不同之处在于,当您在init中执行此操作时,您会在UI出现之前执行此操作,而当您在awakeFromNib中执行此操作时,您会在UI的某个部分出现之后执行此操作。添加观察者所花费的时间不会消失;它只是在UI启动后移动到。不过,这仍然是一件好事,总的来说,你应该试着去做。谢谢你的回答!是的,我注意到,如果我在每个对象的init方法中注册所有通知,而不是在awakeFromNib或其他处理程序中注册它们,那么加载时间会有一点差异!我问这个问题是想看看是否有人对这个问题有技术上的解释!比特酒:不完全是。不同之处在于,当您在init中执行此操作时,您会在UI出现之前执行此操作,而当您在awakeFromNib中执行此操作时,您会在UI的某个部分出现之后执行此操作。添加观察者所花费的时间不会消失;它只是在UI启动后移动到。不过,这仍然是一件好事,你应该试着去做 L