我目前無法理解Obj-C塊和__block存儲類型的基礎知識。 從下列文件:無法理解Objective-C塊文檔
我想了解下段和示例:
當一個塊被複制,它創造強烈的引用對象中使用的變量塊。如果在方法的實現中使用塊:
如果通過引用訪問實例變量,則強引用self; 如果按值訪問實例變量,則會強烈引用該變量。 下面的實施例示出了兩種不同的情況:
dispatch_async(queue, ^{
// instanceVariable is used by reference, a strong reference is made to self
doSomethingWithObject(instanceVariable);
});
id localVariable = instanceVariable;
dispatch_async(queue, ^{
/*
localVariable is used by value, a strong reference is made to localVariable
(and not to self).
*/
doSomethingWithObject(localVariable);
});
要覆蓋此行爲對於特定的對象變量,可以用該存儲__block類型修飾符標記它。
我的問題:
- 究竟是如何被一個例子「通過引用訪問」,而另一種是通過變量訪問?爲什麼localVariable被「價值使用」?
- 這篇文章的意思是「強烈的自我引用」是什麼意思?它指的是「自我」?
- 如果我在第二個例子中將__block存儲類型添加到localVariable中,我是否錯誤地假定該塊關閉了變量,所以它將它保留在堆中直到塊被釋放?還有什麼其他事情發生?
謝謝!