2011-08-05 38 views
3

我使用通知来提供一对对象之间的双向通信,其中对象A发出请求,但可能会在对象B响应之前取消分配。创建NSNotificationCenter的“私人”实例是否有任何伤害?

NSNotificationCenter对此非常完美,因为对象A可以简单地将自己添加为观察者。当对象B响应时,它发布通知,并且如果对象A已经消失,则通知仅被忽略。

由于通知仅适用于对象A,因此为这些通知设置私有实例NSNotificationCenter而不是在defaultCenter上发布它们是可行的。唯一的缺点是NSNotificationCenter实例会增加内存,但是当通知发布在任何一个上时都会节省时间。

我错过了什么?

回答

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 

简短的回答是请你做

+0

谢谢,使它成为一个运行属性是一个好主意。 – benzado

0

没关系,你可以使用默认的通知中心,并且只有对象A /对象B相互倾听。只需要让对象A在释放前从通知中心删除自己,以防止EXC_BAD_ACCESS。

+0

我不问我是否可以使用defaultCenter,我已经知道了。 – benzado

+0

引用Apple文档“每个正在运行的Cocoa程序都有一个默认通知中心,通常不会创建自己的...” – futureelite7

+1

我的问题是:“在X中而不是在Y中是否有任何伤害?”你的回答:“你可以做Y.” – benzado

3

没有。在可可中,AppKit的NSWorkspace确实有exactly this