objective-c - 编码 Objective-c block ?

标签 objective-c objective-c-blocks nscoding

是否可以使用 NSKeyedArchiver 对 Objective-C block 进行编码?

我认为 Block 对象不符合 NSCoding,因此 [coder encodeObject:block forKey:@"block"] 不起作用?

有什么想法吗?

最佳答案

不,由于各种原因,这是不可能的。 block 中包含的数据不以任何类似于实例变量的方式表示。没有状态 list ,因此无法为存档目的枚举状态。

相反,我建议您创建一个简单的类来保存您的数据,其实例携带 block 在处理过程中使用的状态并且可以轻松存档。

您可能会找到这个 question interesting 的答案.这是相关的。


为了扩展,假设你有一个像这样的类:

@interface MyData:NSObject
{
    ... ivars representing work to be done in block
}

- (void) doYourMagicMan;
@end

然后你可以:

MyData *myWorkUnit = [MyData new];

... set up myWorkUnit here ...

[something doSomethingWithBlockCallback: ^{ [myWorkUnit doYourMagicMan]; }];

[myWorkUnit release]; // the block will retain it (callback *must* Block_copy() the block)

从那里,您可以在 MyData 上实现归档,将其保存起来,等等...关键是将 Block 视为进行计算的触发器,并将所述计算和计算的必要状态封装到 MyData 类的实例中.

关于objective-c - 编码 Objective-c block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2172758/

相关文章:

objective-c - 无法从 Cocoa NSMutableString 中去除换行符

ios - 强 block 捕获 'self'

iphone - NSCoding 嵌套自定义对象?

ios - SPTAudioStreamingController 停止 playURIs 短缓冲区

ios - 如何将MySQL数据库与objective-c项目连接?

iphone - 为 TWTweetComposeViewController 设置完成处理程序时崩溃

swift - 初始化需要 `init(coder: NSCoder)`的子类

arrays - 检索数组功能不起作用

仅适用于 Ipad 的 IOS 版本

iphone - 在 block 中使用 ivar 返回到其他对象