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