Mar*_*oft 5 iphone memory-management ios
在用于iOS应用程序的Xcode模板(例如"基于视图的应用程序")中,创建了一个包含三个顶级对象的MainWindow笔尖:App Delegate,Window和主View Controller.App Delegate retain为窗口和视图控制器定义插座/访问器.我不明白为什么App Delegate需要保留这些对象,因为它们已经是nib中的顶级对象,因此应该由UIApplication保留.检查retainCount这些对象是否足够显示1应用程序委托以及2窗口和视图控制器.我可以/我应该改变这些assign吗?
我知道这是一个挑剔的事情,但我希望理解为什么这样做会提高我对iOS内存管理的整体理解.
在 iOS 中分配是很棘手的,我使用@property(非原子,保留)。与 Mac OS 不同,iOS 中连接到 XIB 对象的插座不会自动保留和管理内存,这可能会随着 iOS 5 的改变而改变,但可能性不大。
其基本原理是,您可以在 - (void)viewDidUnload 中释放任何视图对象,并删除您不需要的任何视图,或者可以在 -(void)viewWillAppear 上重新初始化。但表面上,目标是让您控制收集的内容和未收集的内容。
我的模式是为它们声明普通的可可访问器,就像我为任何其他属性所做的那样,并在 viewDidUnload 中将它们设置为 nil
- (void)viewDidUnload
{
[super viewDidUnload];
self.buttonOne = nil;
self.buttonTwo = nil;
self.buttonThree = nil;
self.buttonFour = nil;
self.buttonFive = nil;
self.buttonSix = nil;
self.lineWidthSlider = nil;
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
Run Code Online (Sandbox Code Playgroud)
你是对的,但是,保留窗口并没有多大意义,但恕我直言,这对于一致性来说是有意义的。这么长的说是的,根据我的经验,应用程序委托确实需要保留 UIWindow,否则它可以在内存扫描中收集并导致一些随机崩溃。
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |