1

我有一个NSBlockOperation创建一些对象的。一个NSStringandNSData被放入一个用户信息NSDictionary中。然后该块发送一个NSNotification带有这样的用户信息。

这是一个代码片段:

    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,它只是一个NSArrayof NSData,特别是它用于动态创建图像并传递用于显示(无操作),并且该块未使用或通知后更改它们。

我不能使用委托,因为几个控制器可能还活着并等待该数据。

我在问这种情况是否会导致任何类型的问题,以及我是否需要特别注意变量,例如用弱、强、块或其他标记它们。

整个项目都在ARC之下。

4

1 回答 1

0

你的问题很模糊,但你应该注意以下几点:

  • 用户信息被通知对象强引用
  • 您的字典被 userInfo 对象强引用
  • 只要你在另一个线程完成了你的操作,不再修改数据,就不存在多线程问题
  • 发送通知时,请注意接收数据的线程,因为这可能会导致通知接收器出现问题。一般来说,NSNofificationCenter 的旧 API 在发送方的同一线程中接收调用。新 API(基于块)允许您指定接收通知的队列。
于 2013-01-04T15:05:07.483 回答