我最近遇到了一個使用Facebook的應用程序切換塊的問題。我需要在Facebook登錄後調用一個塊。我們爲什麼要複製塊而不是保留?
當應用程序切換回來時(因爲它在堆棧中),我的塊首先被銷燬,所以我決定保留它。但是這並不奏效,我搞砸了這個問題:/。我在that blog和here上找到了解決方案。
我的問題很簡單:爲什麼複製作品並保留不?
我最近遇到了一個使用Facebook的應用程序切換塊的問題。我需要在Facebook登錄後調用一個塊。我們爲什麼要複製塊而不是保留?
當應用程序切換回來時(因爲它在堆棧中),我的塊首先被銷燬,所以我決定保留它。但是這並不奏效,我搞砸了這個問題:/。我在that blog和here上找到了解決方案。
我的問題很簡單:爲什麼複製作品並保留不?
因爲當你創建一個塊時,沒有什麼可以保留,因爲它不存在於堆中,直到你用Block_copy
複製它。 WWDC關於街區的講座對此進行了介紹。
更多信息:http://www.friday.com/bbum/2009/08/29/blocks-tips-tricks/
見my recent answer另一個類似的問題:
默認塊在棧上創建。這意味着它們只存在於它們創建的範圍內。
[...]
閱讀由Mike Ash編寫的Stack and Heap Objects in Objective-C以獲取有關堆棧與堆的更多信息。
感謝您的回答,您的鏈接很有用! – Jeremy
好的!非常感謝,這有助於我更好地理解事情的運作方式! – Jeremy
「但是,從iOS 6開始,它們被視爲常規對象」它們一直被視爲常規對象。 – newacct
@newacct我的意思是他們是堆分配的對象。在iOS 5中,它們是需要通過'block_copy'複製到堆棧的堆棧對象(這不再需要) – borrrden