1

userInfoの辞書のメモリがどのように処理されるかをドキュメントで見つけることができませんNSNotification。1つを指定した場合、これは単にメモリ内の既存の場所へのポインタですか、それともこのデータを通知に「運ぶ」ために新しいメモリが割り当てられていますか?

後者の場合、大きな辞書を参照する場合はパフォーマンスに影響します。前者の場合、辞書はすでにメモリ内にあるので、辞書の大きさは問題ではないと思います。

また、この点で、通知に追加される前に辞書が保持されない場合、辞書はどのくらいの期間存続しますか?通知を送信する前に辞書が保持されていなかった場合でも、この通知の受信者は、受信した時点でこの辞書にアクセスできると安全に想定できますか?

4

1 に答える 1

0

userInfo提供されたオブジェクト+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfoは保持されていると思います。また、ストアに追加のメモリが割り当てられることはないと確信していますuserInfo

したがって、によって参照さuserInfoれるオブジェクトは、通知がリリースされていない間は存続します(その通知のすべてのオブザーバーによって送信および続行されます)。はい、あなたは辞書(またはあなたが提供するものは何でもuserInfo)がオブザーバーでアクセス可能であると仮定することができます(もちろん、あなたがそれを過度に解放していない場合)。

CoreFoundationのメモリ管理プログラミングガイドから->所有権ポリシー

インスタンス変数と受け渡しパラメータ

基本的なルールの当然の結果として、オブジェクトを別のオブジェクトに(関数パラメーターとして)渡すとき、受け手がそれを維持する必要がある場合は、渡されたオブジェクトの所有権を取得することを期待する必要があります。

于 2012-10-07T05:03:39.377 に答える