2011-05-19 68 views
12

我想創建一個方法,它接受一個塊,將其保存在成員中,啓動一個異步任務,然後在異步調用完成回調時調用該塊。我是否必須在Objective-C for iOS中保留塊?

我必須保留該塊嗎?塊內存是否像其他對象一樣管理?我可以合成一個屬性來保存塊嗎?

+4

在[bbum's weblog-o-mat](http://www.friday.com/bbum/2009/08/29/blocks-tips-tricks/)中對此進行了很好的說明。這篇特別的文章中的第五和第六項與你的問題有關,但整篇文章絕對值得一讀。 – 2011-05-20 03:33:22

回答

35

塊與內存管理的其他對象相似,但不完全相同。當創建訪問局部變量的塊時,它將在堆棧上創建。這意味着只要其範圍存在,它就是有效的。爲了以後保存這個塊,你必須copy它,它將它複製到堆中。因此,爲了防止出現此類塊的問題,在將塊存儲到實例變量中之前,應該複製而不是保留塊。

+1

雖然您可以在初始複製後保留它。 (儘管2:副本相當於在第一個之後保留。) – 2011-05-20 03:31:47

2

你必須複製該塊,是的。塊是常規的Objective-C對象。

相關問題