gpt4 book ai didi

ios - 使用 ARC 进行内存管理

转载 作者:行者123 更新时间:2023-11-29 10:58:51 25 4
gpt4 key购买 nike

我的项目中有以下代码:

    RBPPStockChartViewController * stocksController = [[RBPPStockChartViewController alloc] initWithNibName:@"RBPPStockChartViewController" bundle:nil];
stocksController.companyCode1 = selectedCompany.companycode;
stocksController.ticker1Text = selectedCompany.ticker;
stocksController.isMarketIndicator = FALSE;

if (isfromTVIndexes)
{
stocksController.isDJIndexesMenuDisplay = TRUE;
stocksController.isDJIndexesDirectChartDisplay = FALSE;
}
stocksController.closechartdelegate = self;
self.stockchartvc = stocksController;
[[self view] addSubview:stocksController.view];// here retain count is incremented.
// And I am getting leak when I check
//with instrument.

我正在使用 ARC。我想知道如何克服这种泄漏。

最佳答案

几个想法:

  1. 这种将 Controller 添加到某个强变量然后将其 View 添加为 subview 的技术不是呈现另一个 View 的推荐方式。你真的应该使用

    [self presentViewController:stocksController animated:YES completion:NULL]

    [self.navigationController pushViewController:stocksController animated:YES]

    (或者,如果您决定按照自己的方式进行操作,则应该执行 View Controller 包含调用,例如 addChildControllerdidMoveToParentViewController)。如果你让你的 View Controller 层次结构与你的 View 层次结构不同步,你最终可能得不到某些事件(特别是旋转事件;关于不小心这样做的问题/风险的冗长讨论,请参阅 WWDC 2011 session - Implementing UIViewController Containment )。此外,如果操作得当,您就不必在 self.stockchartvc 中保留强引用,也根本不需要 closechartdelegate(也不需要可能调用的代码) .

    顺便说一句,如果您采用这些公认的模式之一(模式/推送转换或 View Controller 包含),这可能会解决那里的内存问题。

  2. 或者,如果您不解决这个结构性问题,那么您可能需要仔细查看 closechartdelegate 调用的代码。 IE。它是 removeFromParentView 吗? nil stockchartvc 变量吗?如果你不做这两件事,你就会有效地泄漏。

  3. 您不会使用任何重复计时器或任何其他可能导致强引用循环的东西,对吗?例如,我希望 closechartdelegateweak

如果还是不能解决问题,我们可能需要看看stockchartvcclosechartdelegate的内存语义,看看closechartdelegate的代码 正在调用。

关于ios - 使用 ARC 进行内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16977617/

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