2012-11-14 264 views
1

是的,我們這樣做,如果塊可能會改變變量。__block究竟做了什麼?

但是屏幕背後發生了什麼?

誰擁有「對象」?該塊或功能,或誰?

__block如何使不同?

下面是一些示例:

__block NSError * error=nil; 
__block NSURLResponse *urlresponse=nil; 
__block NSData *response = nil; 
NSString *json_string=nil; 

[BGHPTools computeTimeWithName:FUNC block:^{ 
    response= [NSURLConnection sendSynchronousRequest:request returningResponse:&urlresponse error:&error]; 

}]; 

回答

5

從申請doc

__block變量生活在被聲明或內變量的創建的變量的詞法作用域和所有塊和塊拷貝之間共享存儲詞彙範圍。因此,如果在幀中聲明的塊的任何副本存活超過幀的末尾(例如,通過在某處等待以後執行),那麼存儲器將在存儲器堆棧幀的銷燬中倖存下來。給定詞法範圍中的多個塊可以同時使用共享變量。

+1

夠好。我認爲你需要一種解釋更多的方法。例如,這和普通變量有什麼區別? –

+0

__block變量是否存在於堆棧或堆中?這是一個開始。 –