gpt4 book ai didi

iOS ARC 不释放 View

转载 作者:行者123 更新时间:2023-12-01 17:56:10 28 4
gpt4 key购买 nike

我们正在创建一个带有主菜单的应用程序,您可以从中导航到带有后退按钮的第二个 View 和大约 6 个其他按钮,这些按钮将 6 个不同的 subview 加载到内存(数组)中,具体取决于您选择的那个。
当用户选择“后退”按钮时,我想用 6 个按钮从屏幕中分配的内存中删除任何内容。
目前,应用程序只是建立内存,似乎没有任何东西被释放。
请参阅以下 URL 中的屏幕截图:
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];
}

最佳答案

您创建了一个保留周期。

您将委托(delegate)声明为强属性。这意味着当你这样做时

timeView .delegate = self;
timeView保留 self .

当您添加 timeView作为 self 的 subview Controller , self保留 timeView .

如果 self强烈引用 tabViews , 那么它是 tabViews 的所有者,它是添加到它的对象的所有者,这会产生另一个保留周期: self拥有 tabViews拥有 timeView拥有 self .

如果您不想保留循环,则您的子对象绝不能对其 parent 或任何 parent 的 parent 持有强引用。永远不要将委托(delegate)声明为强属性。

至于你的“must be __weak”错误,请看 this answer .

关于iOS ARC 不释放 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17290287/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com