2011-05-09 34 views
2

我有一個關於Grand Central Dispatch,塊和內存管理的問題。考慮以下代碼:以下GCD /塊方案的推薦模式是什麼?

Worker *myWorker = [[Worker alloc] init]; 
[work doAsyncStuffWithBlock:^(NSMutableDictionary *info) 
{ 
    NSLog(@"processing info results"); 
}]; 
[myWorker release]; 

在這裏,我想doAsyncStuffWithBlock異步發生,然後執行該塊時,它有一定的效果。同時這個主代碼將繼續。在這裏安全地釋放myWorker是否安全?我在內部實現的dispatch_queue會保留一個引用來最終執行該塊嗎?或者,我應該在塊內釋放它嗎?這似乎很奇怪。感謝您的任何建議。

+0

您發佈的代碼除了初始化和釋放之外不會對'myWorker'執行任何操作:它將立即釋放。此外,您的代碼不會顯示有關提到的調度隊列的任何信息。 – 2011-05-09 19:57:41

回答

4

當一個塊的引用一個Objective-C的對象,例如:

Worker *myWorker = [[Worker alloc] init]; 
[work doAsyncStuffWithBlock:^(NSMutableDictionary *info) 
{ 
    NSLog(@"processing info results"); 
    [myWorker doSomething]; 
}]; 
[myWorker release]; 

它自動保留該對象,並且該塊被釋放時,它會自動釋放該對象。

所以是的,你應該在你的代碼中釋放myWorker,不,你不應該在塊內部釋放myWorker

+0

感謝您的確認。 – 2011-05-11 03:17:37

1

閱讀

可以外塊釋放。

+0

感謝您的鏈接 – 2011-05-11 03:18:19

+0

良好的鏈接,但答案太短。 – 2011-05-24 00:52:59

相關問題