2011-08-05 8 views
3

私は、オブジェクトAが要求を出すが、オブジェクトBが応答する前に割り当てを解除するかもしれない、オブジェクトのペア間の双方向通信を提供するために通知を使用しています。NSNotificationCenterの「プライベート」インスタンスを作成する際に問題はありますか?

オブジェクトAは単にオブザーバとして追加できるため、NSNotificationCenterはこれに最適です。オブジェクトBが応答すると、通知がポストされ、オブジェクトAが消えた場合、通知は無視されます。

通知はオブジェクトAのみを対象としているため、defaultCenterに通知するのではなく、これらの通知に対してプライベートインスタンスNSNotificationCenterを設定することが現実的です。唯一の欠点は、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のみが互いにリスンするようにすることができます。 EXC_BAD_ACCESSを防ぐため、オブジェクトAに割り当て解除前に通知センターから自分自身を削除するように頼んでください。

+0

私はdefaultCenterを使用できるかどうかは分かりませんが、私はすでにそれを知っています。 – benzado

+0

Appleのドキュメントを引用する「実行中の各Cocoaプログラムにはデフォルトの通知センターがありますが、通常は自分で作成しないでください...」 – futureelite7

+1

私の質問:「YではなくXを実行することに何か問題はありますか?あなたの答え: "あなたはYをすることができます" – benzado

3

いいえ。 Cocoaでは、AppKitのNSWorkspaceはexactly thisです。

関連する問題