Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIViewController子类在关闭后未释放_Ios_Objective C_Memory Management - Fatal编程技术网

Ios UIViewController子类在关闭后未释放

Ios UIViewController子类在关闭后未释放,ios,objective-c,memory-management,Ios,Objective C,Memory Management,因此,我遇到了一个似乎已经在这里一次又一次解决的问题。不幸的是,我束手无策,所以我会发帖,看看是否有人能帮忙 正如标题所示,我有一个内存泄漏(无限内存增长)。我可以在Instruments(Allocations)中看到我的InspectionPageTableViewController对象正在被分配,但从未解除分配-存在malloc,但没有相应的空闲。问题是,我看不出这是怎么回事。对象的整个历史如下所示(从实例化的视图控制器到其取消): 此事件的堆栈跟踪如下所示: 所述方法(在Inspe

因此,我遇到了一个似乎已经在这里一次又一次解决的问题。不幸的是,我束手无策,所以我会发帖,看看是否有人能帮忙

正如标题所示,我有一个内存泄漏(无限内存增长)。我可以在Instruments(Allocations)中看到我的InspectionPageTableViewController对象正在被分配,但从未解除分配-存在malloc,但没有相应的空闲。问题是,我看不出这是怎么回事。对象的整个历史如下所示(从实例化的视图控制器到其取消):

此事件的堆栈跟踪如下所示:

所述方法(在InspectionViewController中)的代码如下:

当InspectionViewController成功解除分配时,InspectionPageTableViewController在此处用行实例化

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"InspectionPageTableViewController"];
。。。从来没有

我已经尝试从该对象的SuperView中删除InspectionPageTableViewController,以及从该对象中添加到的任何和所有视图中删除它(尽管这似乎毫无意义,因为调用对象无论如何都成功解除分配)。此外,在该类和InspectionPageTableViewController类本身之外,没有出现字符串“InspectionPageTableViewController”

我对UIStoryboard方法——InstanceEviewController WithiIdentifier表示怀疑:但我在这里看到了几个答案,它们说它返回一个自动释放对象。所以这不可能是问题所在


有人能告诉我这里发生了什么事吗?如果有更多关于该对象的有力引用,我肯定能够在仪器中看到历史中的保留事件。

仔细阅读您所写的内容,我发现两个可能的原因:

2) 您错误地使用了视图控制器包含。VC遏制是出了名的棘手。您可能没有从self.childViewControllers中删除它(使用此包含删除操作的正确方法调用)


3) 如果您要将VC添加到导航控制器中,则应该使用推送和弹出,而不是包含。

因此有几件事是错误的。我没有在仪器中启用“记录参考计数”,因此我无法了解全部情况。整个画面如下所示:


以及中间所有的调用,TabLVIEW:VIEWFHealErrInCube保留,涉及一个对象,InspectionPageTableViewController将其设置为委托。遗憾的是,这个对象的委托属性是“强的”。一旦设置为“弱”,对象将按预期自动解除分配。所以,这又是一个“常见的疑点”。

历史垃圾堆不仅仅是一点误导。。。我没有启用“记录引用计数”。现在看一个更完整的转储。经过大量挖掘,我发现我在VC中有一个具有强大委托属性的组件。VC将自己设置为委托。所以通常的嫌疑犯之一。感谢您的阅读和回复:)
controller = [self.storyboard instantiateViewControllerWithIdentifier:@"InspectionPageTableViewController"];