iphone - ios 在字典或数组中存储 ^block?

标签 iphone objective-c ios objective-c-blocks

我可以将 ^block 存储在字典或数组中吗?

我需要监听一个服务器通知,我需要提供一个 block 来处理通知,在我的项目中,几个 View Controller 都想听到通知,所以我做了一个通用的通知管理器,它有自己的 block 用于处理服务器通知,它有一个委托(delegate)数组,所以在经理的 block 中:

- (^)(NSString *message){
    for (delegate in allDelegates)
    {
        delegate.handlerBlock(message);
    }
}

但是我可以将 block 存储在集合中吗?

最佳答案

您可以将对象存储到集合中。但是要注意范围:当它们不在函数范围内时复制它们。这是您的情况,因为您将它们存储在数组中。

[NSArray arrayWithObject: 
[[^{ NSLog(@"block 1"); } copy] autorelease],
[[^{ NSLog(@"block 2"); } copy] autorelease], nil]

在 ARC 上,你仍然需要告诉它你绝对需要复制你的 block 。它应该在释放数组时释放 block 。

  [NSArray arrayWithObject: 
    [^{ NSLog(@"block 1"); } copy],
    [^{ NSLog(@"block 2"); } copy], nil]

关于iphone - ios 在字典或数组中存储 ^block?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13043197/

相关文章:

iphone - 标准 UITableVIewcell UILabel 和 UITextField 中使用的字体是什么?

iPhone 4,录音后的音频电平问题

ios - UICollectionView 神秘崩溃

ios - iOS 中收到内存压力通知(严重)

ios - 核心戈尔图形和 alpha 值

iphone - 如何通过代码查找iPhone/iPod设备型号(3G、3GS、4、4S)?

iphone - 我在缓存现有文件的路径时遇到问题

iPhone 相机对焦

ios - 在3D世界ARKit中创建UIBezierPath形状

ios - UITextField 中占位符文本的默认颜色是什么?