3
A
回答
12
这里是做了一些工作在后台后存储用于完成回调的块的(ARC-以下)例如:
Worker.h:
@interface Worker : NSObject
{
void (^completion)(void);
}
@property(nonatomic,copy) void (^completion)(void);
- (void)workInBackground;
@end
Worker.m:
@implementation Worker
@synthesize completion;
- (void)dealloc
{
Block_release(completion);
[super dealloc];
}
- (void)setCompletion:(void (^)(void))block
{
if (completion != NULL)
Block_release(completion);
completion = Block_copy(block);
}
- (void)workInBackground
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
{
// Do work..
dispatch_async(dispatch_get_main_queue(), completion);
});
}
@end
2
您可以复制并使用C函数释放块:
Block_copy(); Block_release();
如果您正在使用的Objective-C,你可以发送块
copy
,retain
,和release
(和autorelease
)消息。为避免内存泄漏,您必须始终将
Block_copy()
与Block_release()
进行平衡。您必须在垃圾收集环境中将copy
或retain
与release
(或autorelease
)相平衡 - 无论如何。
相关问题
- 1. 块中的实例变量
- 2. Thread.CurrentCulture不保存到实例变量?
- 3. 实例化实例变量为块
- 4. 参考实例变量块
- 5. 类块实例变量
- 6. Ruby:实例化块中的新变量
- 7. 更改块中的实例变量
- 8. Rails助手模块中的实例变量存储在哪里?
- 9. 如何在变量中保存“创建片段的新实例”?
- 10. 实例变量存储
- 11. 的iOS:在块实例变量
- 12. 在变量中保存代码块
- 13. 将块存储在实例变量中有什么用处
- 14. 在WCF服务实例的实例变量中存储OperationContext.Current
- 15. 保存分配给实例方法的变量的上下文
- 16. Ruby中的类变量实例变量
- 17. 如何迭代实例变量中的实例变量?
- 18. Ruby中的类实例变量和实例变量
- 19. 初始化块实例变量
- 20. Ruby - 从块内更新实例变量
- 21. 访问模块实例变量
- 22. Objective C - 如何实例化保存为变量的类
- 23. Rspec:保存失败时的实例变量值
- 24. 解析XML和保存的标签实例变量
- 25. 键入变量保存受约束泛型类的实例
- 26. 包中的'实例'变量
- 27. Lisp中的实例变量?
- 28. Java中的实例变量
- 29. Ruby中的实例变量
- 30. Stripes中的实例变量
这很好。在同一个控制器类中,我想将接收到的块保存在一个方法中,以便稍后以另一种方法使用它。我应该怎么做。我想将块保存在某个实例变量上,然后再使用它。 – Abhinav 2012-04-27 02:17:55
您不能在ARC环境中使用'retain','release'或'autorelease'。 – Abizern 2012-04-27 02:23:31
请参阅http://stackoverflow.com/questions/8360998/beginsheet-block-alternative-with-arc和http://stackoverflow.com/questions/9701923/arc-bridge-cast-block-copy-block-release if你正在使用ARC。 – Hailei 2012-04-27 02:48:50