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. Ruby:實例化塊中的新變量
- 3. 更改塊中的實例變量
- 4. 的iOS:在塊實例變量
- 5. Ruby中的類變量實例變量
- 6. Ruby中的類實例變量和實例變量
- 7. 訪問模塊實例變量
- 8. 鍵入變量保存受約束泛型類的實例
- 9. Java中的實例變量
- 10. Ruby中的實例變量
- 11. Lisp中的實例變量?
- 12. Stripes中的實例變量
- 13. 實例變量
- 14. 實例變量
- 15. 實例變量
- 16. 實例變量不保留值
- 17. 實例變量不保留其值
- 18. 如何使用ARC將塊實例化爲實例變量?
- 19. 實現文件中的實例變量 - 私有與受保護
- 20. 在RSpec中,如何將實例變量傳遞給示例塊?
- 21. 通過Android活動生命週期保存實例變量值
- 22. 將實例變量保存到數據庫Rails
- 23. Matlab實例變量沒有保存,恢復爲0
- 24. 如何從其他模塊訪問模塊的實例變量?
- 25. 實例變量在保留片段中變爲空
- 26. 內存管理和實例變量?
- 27. NSMutableArray實例變量內存管理
- 28. 刷新後緩存實例變量
- 29. iOS實例變量
- 30. querydsl實例變量
這很好。在同一個控制器類中,我想將接收到的塊保存在一個方法中,以便稍後以另一種方法使用它。我應該怎麼做。我想將塊保存在某個實例變量上,然後再使用它。 – 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