iOS应用程序的应用程序委托是否需要保留UIWindow?

问题描述 投票:6回答:2

在iOS应用程序(例如“基于视图的应用程序”)的Xcode模板中,创建了一个MainWindow笔尖,其中包含三个顶级对象:应用程序代理,窗口和主视图控制器。应用程序代表为窗口和视图控制器定义了retain出口/访问器。我不明白为什么App Delegate需要保留这些对象,因为它们已经是笔尖中的顶级对象,因此应该由UIApplication保留。检查这些对象的retainCount时,请确保足够为应用程序委托显示1,并为窗口和视图控制器显示2。我可以/应该将它们更改为assign吗?

我知道这是一件挑剔的事情,但我希望了解为什么这样做会提高我对iOS内存管理的整体了解。

iphone ios memory-management
2个回答
1
投票

[分配在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;
}

您说的没错,但是保留窗口确实没有多大意义,但保持一致恕我直言是有意义的。这么长话说“是”,以我的经验,应用程序委托确实需要保留UIWindow,否则它可以在内存扫描中收集并造成一些随机崩溃。


0
投票

看来,应用程序委托does

© www.soinside.com 2019 - 2024. All rights reserved.