相关疑难解决方法(0)

在Cocoa中,我需要在解除分配时删除接收KVO通知的对象吗?

当我注册一个对象foo以从另一个对象接收KVO通知时(使用addObserver:...),如果我然后解除分配foo,我是否需要在-dealloc中removeObserver:forKeyPath:bar发送消息?

macos cocoa

23
推荐指数
2
解决办法
7241
查看次数

KVO:我可以从具体物体中移除所有观察者

我正在使用键值观察.我有object_1(NSManagedObject)和其他一些对象观察者.当我从托管对象上下文中删除object_1时,我的程序崩溃了.

CoreData:错误:严重的应用程序错误.在Core Data更改处理期间捕获到异常.这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误.

我可以将一些东西放到dealloc方法(或其他地方)来删除object_1的所有观察者吗?或者唯一合适的决定是在我即将从托管对象上下文中删除object_1并通过其他对象监听此通知(从object_1的观察者中删除自己)时发送通知?

cocoa objective-c key-value-observing

7
推荐指数
1
解决办法
7640
查看次数

键值当观察对象被释放时,观察removeObserver

有关此主题的各种问题,但没有一个问题可以回答我的问题.

removeObserver当对象被释放时,我想从一个对象.我正在使用KVO,因为需要观察多个项目,并且NSNotification在这种情况下具有巨大的开销.

这是场景:

(多个)对象被各种其他对象观察到.当observer取消分配时,我可以将其作为观察者删除.但是当observed取消分配时,我需要告诉所有人observers将自己移除为观察者.这该怎么做?

iphone objective-c key-value-observing ios

6
推荐指数
1
解决办法
1970
查看次数

关于"dealloc"的文档

在dealloc的实现中,您不应该调用超类的实现.您可以覆盖此方法以处置除对象的实例变量之外的资源,例如:

  • (void)dealloc {free(myBigBlockOfMemory); }

上面说我们不应该调用超类的实现.但在它下面说我们应该"通过消息将超级版本的dealloc合并到超级".所以两段之间似乎存在一些冲突.这一定是由于我错过了一些东西.希望有人能解释一下......

如果使用手动引用计数,则子类必须实现它们自己的dealloc版本,以允许释放对象消耗的任何其他内存 - 例如为解除分配的对象拥有的数据或对象实例变量的动态分配存储.在执行特定于类的释放后,子类方法应该通过消息将dealloc的超类版本合并到super:

  • (void)dealloc {[companion release]; 自由(myBigBlockOfMemory); [super dealloc]; }

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html

iphone cocoa-touch objective-c

0
推荐指数
1
解决办法
265
查看次数