创建NSNotificationCenter的“私有”实例有什么害处吗?

时间:2011-08-05 04:47:36

标签: cocoa-touch cocoa nsnotificationcenter

我正在使用通知来提供一对对象之间的双向通信,其中对象A发出请求但可能在对象B响应之前被解除分配。

NSNotificationCenter非常适合这种情况,因为对象A可以简单地将自己添加为观察者。当对象B响应时,它发布通知,如果对象A消失,则通知仅被忽略。

由于通知仅适用于对象A,因此为这些通知设置NSNotificationCenter的私有实例是实际可行的,而不是将其发布在defaultCenter上。唯一的缺点是NSNotificationCenter实例的额外内存,但是在通知发布时节省了时间。

我错过了什么吗?

3 个答案:

答案 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。