iOS中强烈而微弱的困惑

时间:2015-04-16 05:46:28

标签: ios objective-c iphone

我对在特定情况下使用StrongWeak感到困惑。

我有一个班级ParentClass,其中有3 object ContainerClass1ContainerClass2ContainerClass3

每个ContainerClass都有自己的强大属性,包含NSMutableArray

等Mutable对象

现在,在我的情况下,我必须一次只显示一个ContainerClass,因此如果显示ContainerClass1,则不需要ContainerClass2ContainerClass3

所以我想当我展示ContainerClass1时,会将ContainerClass2ContainerClass3个对象设置为nil。在这里,我很困惑,只是将其他ContainerClass(未显示)设置为nilrelease其记忆?因为它们对其他物体具有很强的属性。

或者我是否需要先将所有其他ContainerClass's强大的属性设置为nil,然后将ContainerClass设置为nil

提前致谢。

2 个答案:

答案 0 :(得分:8)

@zoeb,这条链接可以帮助您远离基本的内存问题。

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

<强>编辑:

正如我们所知,Apple在IOS 5.0中引入了ARC,ARC是编译器级功能,可简化objective-c对象的生命周期过程。在ARC介绍之前,我们手动管理内存意味着“手动引用计数(MRC)”。使用MRC,Developer需要记住何时释放或保留对象。意味着开发人员需要管理objective-c对象的生命周期。

根据开发人员的观点,我们最感兴趣的是在我们的应用程序中添加新功能,而不是专注于内存问题。但事情确信内存管理在应用程序成功中发挥着至关重要的作用。为了向开发人员提供帮助,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 analyzer

答案 1 :(得分:1)

通过以下链接可以清楚地看出强弱之间的混淆。

Differences between strong and weak in Objective-C