簡體   English   中英

iOS中強烈而微弱的困惑

[英]Strong and Weak Confusion in iOS

在我的特殊情況下,我對使用StrongWeak感到困惑。

我有一個ParentClass類,它有3 object ContainerClass1ContainerClass2ContainerClass3

每個ContainerClass都有自己的強大屬性,其中包含像NSMutableArray這樣的Mutable對象

現在,在我的情況,我也只顯示一個ContainerClass的時間,所以如果ContainerClass1顯示然后ContainerClass2ContainerClass3不是必需的。

所以我想當我展示ContainerClass1 ,會將ContainerClass2ContainerClass3對象設置為nil 在這里我很困惑,只是將其他ContainerClass (未顯示)設置為nilrelease其內存嗎? 因為它們對其他對象具有強大的屬性。

或者我是否需要先將所有其他ContainerClass's強屬性設置為nil ,然后將ContainerClass設置為nil

提前致謝。

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

如何對克服記憶,問題式,iphone的應用程序,具有自動引用計數

編輯:

我們知道Apple在IOS 5.0中引入了ARC,ARC是編譯器級功能,可以簡化objective-c對象的生命周期。 在ARC介紹之前,我們手動管理內存意味着“手動引用計數(MRC)”。 使用MRC,Developer需要記住何時釋放或保留對象。 意味着Developer需要管理objective-c對象的生命周期。

根據Developer的觀點,我們最感興趣的是在我們的應用程序中添加新功能,而不是專注於內存問題。 但事情確信內存管理在應用程序成功中發揮着至關重要的作用。 為了向Developer提供幫助,Apple找到了自動管理內存的方法。

ARC巧妙地管理內存,但這不是百分之百。 我們需要在開發過程中關注一些問題,以便從缺乏內存問題中刪除我們的應用程序。 在這里,我將嘗試在ARC基礎應用程序中提供管理內存的解決方案。 這也不是百分之百。 但它會盡力幫助編譯器估算客觀對象的生命周期。

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

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

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

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

等等

步驟2.根據我們的開發人員,最令人困惑的問題是編譯器是否允許在ARC基礎應用程序中聲明“dealloc”方法。 答案是肯定的,但不允許在其中聲明“[super dealloc]”。 所以在每個控制器中覆蓋“dealloc”方法。

-(void)dealloc{

}

步驟3.在“dealloc”方法中從superview中刪除重載對象,而不是像MKMapview,ScrollView等那樣設置“nil”引用。

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

步驟4.避免死鎖機制。 (示例:類A和類B在那里。類B被聲明為Delegate,屬性類型為“Strong”。因此,A類和B類在一個上相互依賴將會釋放。因此在這種情況下,“dealloc”方法是沒有調用任何類。所以類保留在內存中。為了刪除這種情況,我們需要保持對Delegate對象的“賦值”引用。)這只是例如。 我們還需要考慮其他事情,例如“保持塊的弱引用,以便在執行完成后釋放對象”。

這些是避免內存問題的基本步驟。 如果您遇到內存問題,那么您需要借助Analyzer來查找泄漏和內存使用情況。

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

Mamory分析儀

通過以下鏈接可以清楚地看出強弱之間的混淆。

Objective-C中強弱之間的差異

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM