1

私はNSBlockOperationいくつかのオブジェクトを作成するを持っています。とはユーザー情報に入れられNSStringます。次に、ブロックはそのようなuserInfoを使用してを送信します。NSDataNSDictionaryNSNotification

これはコードフラグメントです:

    NSArray *dataHolder = // this array is filled with data created within block
    NSArray *keys = [NSArray arrayWithObjects:idKey, notificationDataKey, nil];
    NSArray *values = [NSArray arrayWithObjects:identifier, dataHolder, nil];
    NSDictionary *userInfo = [NSDictionary dictionaryWithObjects:values forKeys:keys];
    // notification follows

このコードには特別なことは何もありません。私の懸念はdataHolderに関するものです。これは、NSArrayそのNSData場で画像を作成するために使用され、表示(操作なし)に使用するために渡され、ブロックはまたはを使用していません。通知後にそれらを変更する。

複数のコントローラーが稼働していてそのデータを待機している可能性があるため、委任を使用できません。

このシナリオが何らかの問題を引き起こす可能性があるかどうか、そして変数に特別な注意を払う必要があるかどうか、たとえば、弱い、強い、ブロックなどでそれらをマークする必要があるかどうかを尋ねています。

プロジェクト全体がARCの下にあります。

4

1 に答える 1

0

あなたの質問は非常に漠然としていますが、次の点に注意してください。

  • Userinfo は、通知オブジェクトによって強力に参照されます
  • あなたの辞書は userInfo オブジェクトによって強く参照されています
  • 他のスレッドで操作を終了し、データを変更しない限り、マルチスレッドの問題はありません
  • 通知を送信するときは、通知の受信側で問題が発生する可能性があるため、データを受信するスレッドに注意してください。一般に、NSNOfificationCenter の古い API は、送信者の同じスレッドで呼び出しを受け取ります。新しい API (ブロックベース) を使用すると、通知を受け取るキューを指定できます。
于 2013-01-04T15:05:07.483 に答える