我正在使用通知来提供一对对象之间的双向通信,其中对象A发出请求但可能在对象B响应之前被解除分配。
NSNotificationCenter非常适合这种情况,因为对象A可以简单地将自己添加为观察者。当对象B响应时,它发布通知,如果对象A消失,则通知仅被忽略。
由于通知仅适用于对象A,因此为这些通知设置NSNotificationCenter
的私有实例是实际可行的,而不是将其发布在defaultCenter
上。唯一的缺点是NSNotificationCenter实例的额外内存,但是在通知发布时节省了时间。
我错过了什么吗?
答案 0 :(得分:3)
不。在Cocoa中,AppKit的NSWorkspace执行exactly this。
答案 1 :(得分:2)
我认为你可以双管齐下,没有我能想到的真正的(dis)优势。我通常将通知中心作为初始化为共享中心的显式依赖关系。这样,您可以根据需要隔离通知,但该对象开箱即用:
@interface Observable : NSObject
@property(retain) NSNotificationCenter *radio;
@end
@implementation Observable
@synthesize radio;
- (id) init {
[super init];
[self setRadio:[NSNotificationCenter defaultCenter]];
return self;
}
@end
简短的回答是随你做的。
答案 2 :(得分:0)
没关系,您可以只使用默认通知中心,并且只有对象A /对象B互相监听。在重新分配之前,只需要求对象A将其从通知中心中删除,以防止EXC_BAD_ACCESS。