2015-04-16 44 views
5

我對使用StrongWeak在我的特定情況下有點困惑。iOS中的強弱混淆

我有一個類ParentClass它有3 objectContainerClass1,ContainerClass2ContainerClass3

每個ContainerClass有可變對象像NSMutableArray

現在在我的情況下,其自身強大的性能,我只有一個ContainerClass一次顯示,所以顯示,如果ContainerClass1然後ContainerClass2ContainerClass3不是必需的。

所以我想當我顯示ContainerClass1,將ContainerClass2ContainerClass3對象設置爲nil。在這裏,我很困惑,只是設置其他ContainerClass(未顯示)到nilrelease其內存?因爲它們對其他物體有很強的特性。

或者我需要先將所有其他ContainerClass's強屬性設置爲nil,然後將ContainerClass設置爲nil

在此先感謝。

+0

首先,你應該總是設置IBOutlets弱。是的,當您將ContainerClass2設置爲零時,它的所有IBOutlet都將變爲零,因爲其父項爲零。 –

+0

同意Yogesh爲IBOutlets :) –

+0

http://www.rypress.com/tutorials/objective-c/properties – Yuyutsu

回答

8

@ zoeb,可能這個鏈接將幫助你遠離基本的內存問題。

how-to-overcome-memory-problems-in-iphone-applications-with-automatic-reference-counting

編輯:

我們都知道,蘋果在IOS 5.0中引入ARC,ARC是編譯器級別的功能,簡化了Objective-C對象的生命週期的過程。在ARC引入之前,我們手動管理內存意味着「手動引用計數(MRC)」。通過MRC,開發人員需要記住何時發佈或保留對象。意味着開發人員需要管理objective-c對象的生命週期。根據開發人員的觀點,我們主要有興趣在應用程序中添加新功能,而不是專注於內存問題。但事情可以肯定,內存管理在應用程序的成功中起着至關重要的作用爲了給開發者提供幫助,Apple找出了自動管理內存的方法。

ARC聰明地管理內存,但這不是100%。我們需要在開發時關注一些要點,以便從缺乏內存問題中刪除我們的應用程序。在這裏我將嘗試提供ARC基礎應用程序中管理內存的解決方案。這也不是100%。但它會盡力幫助編譯器估計客觀對象的生命週期。

以下是您需要在每個控制器中實施的一些步驟。

步驟1.嚮應用程序中使用的每個UI聲明弱屬性。

實施例:
@property (nonatomic, weak) IBOutlet UIButton* btnPost;

@property (nonatomic, weak) IBOutlet UITableView* tblMessages; 

第2步。正如我們的開發人員最容易混淆的問題是,編譯器是否允許在ARC基礎應用程序中聲明「dealloc」方法。答案是肯定的,但不允許在其中聲明「[super dealloc]」。所以在每個控制器中覆蓋「dealloc」方法。

-(void)dealloc{ 

} 

步驟3.「無」等的MKMapView,滾動型等

-(void)dealloc{ 
dictAddress = nil; 
arrayList = nil; 
[map removeFromSuperview]; 
[scrollView removeFromSuperview]; 
} 

步驟4.避免參考刪除從上海華在「的dealloc」方法而不是設置只是重加載的對象死鎖機制。 (例如:A類和B類在那裏,B類被聲明爲屬性類型爲「Strong」的Delegate,這樣A和B彼此依賴的A和B將會釋放,所以在這種情況下,「dealloc」方法是沒有調用任何類,所以類保留在內存中,爲了移除這種情況,我們需要保持對Delegate對象的「Assign」引用。)這僅僅是舉例。我們需要考慮其他方面,比如「保持塊的弱引用,以便在執行完成後釋放對象」。

這些是避免記憶問題的基本步驟。如果您遇到內存問題,那麼您需要藉助分析儀來查找泄漏和內存使用情況。

下面的鏈接將幫助你分析內存。

Mamory analyzer

+0

哦,我認爲dealloc不會自動調用ARC –

+0

ARC中也調用了'dealloc'。所以將'nil'引用設爲強變量。 –

+0

@無 - ARC **自動**處理強(弱)引用,即點。有沒有**需要使用'dealloc'來將強變量設置爲'nil'。所以第3步是毫無意義的。 – CRD