是否可以使用 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/