我想創建一個方法,它接受一個塊,將其保存在成員中,啓動一個異步任務,然後在異步調用完成回調時調用該塊。我是否必須在Objective-C for iOS中保留塊?
我必須保留該塊嗎?塊內存是否像其他對象一樣管理?我可以合成一個屬性來保存塊嗎?
我想創建一個方法,它接受一個塊,將其保存在成員中,啓動一個異步任務,然後在異步調用完成回調時調用該塊。我是否必須在Objective-C for iOS中保留塊?
我必須保留該塊嗎?塊內存是否像其他對象一樣管理?我可以合成一個屬性來保存塊嗎?
塊與內存管理的其他對象相似,但不完全相同。當創建訪問局部變量的塊時,它將在堆棧上創建。這意味着只要其範圍存在,它就是有效的。爲了以後保存這個塊,你必須copy
它,它將它複製到堆中。因此,爲了防止出現此類塊的問題,在將塊存儲到實例變量中之前,應該複製而不是保留塊。
雖然您可以在初始複製後保留它。 (儘管2:副本相當於在第一個之後保留。) – 2011-05-20 03:31:47
你必須複製該塊,是的。塊是常規的Objective-C對象。
在[bbum's weblog-o-mat](http://www.friday.com/bbum/2009/08/29/blocks-tips-tricks/)中對此進行了很好的說明。這篇特別的文章中的第五和第六項與你的問題有關,但整篇文章絕對值得一讀。 – 2011-05-20 03:33:22