Zoe*_*b S 5 iphone objective-c ios
我对使用Strong或Weak在我的特定情况下感到困惑.
我有一个课ParentClass,有3 object ContainerClass1,ContainerClass2和ContainerClass3.
每个ContainerClass都有自己的强大属性与Mutable对象,如NSMutableArray
现在,在我的情况,我只有一个显示ContainerClass的时间,因此,如果ContainerClass1所示,然后ContainerClass2和ContainerClass3不是必需的.
所以当我展示时ContainerClass1,我想,将设置ContainerClass2和ContainerClass3对象nil.在这里,我很困惑是否只设置其他ContainerClass(未显示)nil将就release其内存?因为它们对其他对象具有强大的属性.
或者我应该首先将所有其他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;
Run Code Online (Sandbox Code Playgroud)
等等
步骤2.根据我们的开发人员,最令人困惑的问题是编译器是否允许在ARC基础应用程序中声明"dealloc"方法.答案是肯定的,但不允许在其中声明"[super dealloc]".所以在每个控制器中覆盖"dealloc"方法.
-(void)dealloc{
}
Run Code Online (Sandbox Code Playgroud)
步骤3.在"dealloc"方法中从superview中删除重载对象,而不是像MKMapview,ScrollView等那样设置"nil"引用.
-(void)dealloc{
dictAddress = nil;
arrayList = nil;
[map removeFromSuperview];
[scrollView removeFromSuperview];
}
Run Code Online (Sandbox Code Playgroud)
步骤4.避免死锁机制.(示例:类A和类B在那里.类B被声明为Delegate,属性类型为"Strong".因此,A类和B类在一个上相互依赖将会释放.因此在这种情况下,"dealloc"方法是没有调用任何类.所以类保留在内存中.为了删除这种情况,我们需要保持对Delegate对象的"赋值"引用.)这只是例如.我们还需要考虑其他事情,例如"保持块的弱引用,以便在执行完成后释放对象".
这些是避免内存问题的基本步骤.如果您遇到内存问题,那么您需要借助Analyzer来查找泄漏和内存使用情况.
下面的链接将帮助您分析内存.
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |