這是關於使用__block
釋放塊內的對象;塊內釋放對象
NSString *str = [SomeObject methodName]; // returned object is autoreleased
[str retain]; //retaining the object since its auto released
現在我將在塊內使用此str
對象。內部塊我會釋放這個對象。 我是否需要像__block NSString *str = ..
這樣的前綴,因爲iam在塊內釋放它? 從規則我明白,如果我們想修改塊內的對象,我們需要前綴__block
。但是這個規則適用於釋放嗎?
你不應該保留塊之外的東西,並在塊內釋放它們。 Cocoa中的內存管理是本地的。每個範圍只對自己負責。該塊的身體沒有保留它,所以不應該釋放它。另外,不能保證塊將被運行(在這種情況下,如果它負責釋放,會發生泄漏),或者可能運行多次(在這種情況下,它將被過度釋放)。 – newacct 2012-07-20 17:43:17