使用NSNotification将块内创建的对象传递到外部世界

时间:2013-01-04 14:03:31

标签: objective-c objective-c-blocks

我有NSBlockOperation创建了一些对象。 NSStringNSData放在用户信息NSDictionary中。然后该块发送带有此类userInfo的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,它只是NSArray的{​​{1}},特别是用于动态创建图像并传递给用户显示(无操作),并且通知后块未使用或更改它们。

我不能使用委托,因为有几个控制器可能还在等待那些数据。

我在问这个场景是否会导致任何问题,如果我需要特别注意变量,例如用弱,强,块或其他标记它们。

整个项目都在ARC下。

1 个答案:

答案 0 :(得分:0)

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

  • Userinfo被通知对象强引用
  • 您的词典由userInfo对象强引用
  • 只要您在其他线程中完成操作,并且不再修改数据,就没有多线程问题
  • 发送通知时,请注意接收数据的线程,因为这可能会导致通知接收方出现问题。通常,NSNofificationCenter的旧API在发送方的同一线程中接收调用。新的API(基于块)允许您指定接收通知的队列。