我们正在创建一个带有主菜单的应用程序,您可以从中导航到带有后退按钮的第二个视图以及大约6个其他按钮,这些按钮将6个不同的子视图加载到内存(数组)中,具体取决于您选择的那个。
当用户选择“后退”按钮时,我想从使用6个按钮在屏幕中分配的内存中删除任何内容。
目前,应用程序只是建立了内存,似乎没有任何东西被释放。 请参阅以下网址中的屏幕截图:
http://oi41.tinypic.com/jfi8ma.jpg
//Load all tab views into memory before loading them into an array
TimeViewController *timeView = [[TimeViewController alloc]init];
LocationViewController *locationView = [[LocationViewController alloc]init];
DropOffViewController *dropOffView = [[DropOffViewController alloc]init];
CompanyViewController *companyView = [[CompanyViewController alloc]init];
PaymentViewController *paymentView = [[PaymentViewController alloc]init];
//Set delegates of the tab views
timeView .delegate = self;
locationView.delegate = self;
//Load all tab views into array
[tabViews insertObject:timeView atIndex:0];
[tabViews insertObject:locationView atIndex:1];
[tabViews insertObject:dropOffView atIndex:2];
[tabViews insertObject:companyView atIndex:3];
[tabViews insertObject:paymentView atIndex:4];
for(int x = 0; x<5;x++)
{
UIViewController *tempView = [[UIViewController alloc]init];
tempView = [tabViews objectAtIndex:x];
[self addChildViewController:tempView];
}
感谢您的帮助
答案 0 :(得分:5)
您创建了一个保留周期。
您将代理人声明为强大的属性。这意味着当你做
时timeView .delegate = self;
timeView
保留self
。
将timeView
作为子视图控制器添加到self
时,self
会保留timeView
。
如果self
拥有tabViews
的强引用,那么它就是tabViews
的所有者,它是添加到其中的对象的所有者,这会产生另一个保留周期:{{1}拥有拥有self
的{{1}}的{{1}}。
如果您不想要保留周期,您的子对象绝不能强烈提及其父母或父母的父母。永远不要将代表声明为强大的财产。
至于您的“必须__weak”错误,请参阅this answer。
答案 1 :(得分:0)
尝试使用此代码擦除后退按钮操作中的内存
for(UIView *view in self.view.subviews)
{
[view removeFromSuperView];
view=nil;
}