2013-06-18 81 views
0

我有一個關於如何最好地管理數組指針以確保沒有內存泄漏發生的問題。我有一個容器類A和一個合成類B.兩者都有一個數組屬性,並且都對數組做了它們自己的事情。但容器是暴露給公共API的唯一類。所以我設置了classA.someProperty,並在內部像下面那樣設置classB.someProperty。我需要做什麼樣的清理工作? ARC會自動爲我處理這個問題嗎?IOS - 內存管理指針

class A 

@property(nonatomic,strong) NSMutableArray* someProperty; 
@property(nonatomic,strong) ClassB* classB; 


Class B 

@property(nonatomic,strong) NSMutableArray someProperty; 

並在A類中執行;

classB.someProperty = [self.someProperty mutableCopy] 
//do some other work with self.someProperty 

and in the implementation in Class B; 
//do some work with self.someProperty [Includes modifications to the array] 
+0

如果你在' - dealloc'中設置'strong'屬性爲'nil',那應該沒問題。這是***的參考點***。*** – 2013-06-18 18:11:37

+0

你確定將屬性設置爲無dealloc - http://stackoverflow.com/questions/7906804/do-i-set-properties-to-nil-in -dealloc-when-arc- – user2453876

+0

@userXXX是的。看過那個咆哮。 BS,最好。 – 2013-06-18 18:14:46

回答

1

您不需要編寫任何清理代碼,ARC會負責釋放內存。 ARC會自動讓代碼減少定義爲強屬性的變量的引用計數。

我會建議你想一個變量的參考計數來理解內存管理。 ARC會自動插入語句以在適當的位置減少引用計數。讓我們考慮兩種方案供您例如:

方案1

沒有其他類有一個變量引用類A的someVariable:當類的引用計數爲0,那麼你可以肯定的是ARC已經把代碼使一些變量引用計數爲0(在A類的dealloc中)。

方案2

被引用類的someVariable然後引用someVariable的計數將仍然被遞減(由ARC插入的代碼),但它不會是零另一變量(比如在C類)所以它不會被釋放(這是你想要的,因爲你想在C類中訪問它)。

+0

謝謝你確認我的直覺,在這種情況下我不需要任何清理代碼。 – user2453876