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
Iphone 如何在objective-c中保持在方法中创建的对象处于活动状态?_Iphone_Ios_Objective C_Xcode_Memory Management - Fatal编程技术网

Iphone 如何在objective-c中保持在方法中创建的对象处于活动状态?

Iphone 如何在objective-c中保持在方法中创建的对象处于活动状态?,iphone,ios,objective-c,xcode,memory-management,Iphone,Ios,Objective C,Xcode,Memory Management,我想在我使用core plot创建的应用程序中放置多个饼图。我制作了一个包装类(我们称它为PieChartViewController),它是一个视图控制器,并设置图形和一些按钮和动作,以使图形具有交互性。要部署它,我通常只需在另一个视图控制器上创建一个属性,该属性保存PieChartViewController,当我初始化此视图控制器时,我只需分配/initPieChartViewController,并将其视图添加到主视图中。这通常效果很好 问题是,在另一个视图上,我想向视图添加数量可变的图

我想在我使用core plot创建的应用程序中放置多个饼图。我制作了一个包装类(我们称它为
PieChartViewControlle
r),它是一个视图控制器,并设置图形和一些按钮和动作,以使图形具有交互性。要部署它,我通常只需在另一个视图控制器上创建一个属性,该属性保存
PieChartViewController
,当我初始化此视图控制器时,我只需分配/init
PieChartViewController
,并将其视图添加到主视图中。这通常效果很好

问题是,在另一个视图上,我想向视图添加数量可变的图形,而这个数字是在初始化视图控制器时确定的。我有一个方法可以初始化每个
PieChartViewController
,并将其添加到父级上的
NSMutableDictionary
,以便保留对它们的引用。然而,这似乎并不能让它们存活下来,因为我总是得到坏访问2次崩溃,当运行仪器时,我意识到它们被释放

因此,当
PieChartViewControllers
存储在属性上时,一切都很好,但当我将它们放入字典中时,它们似乎无法保持足够长的活动时间。我对objective-c中的内存管理还不是很熟悉,我也不知道该怎么做,希望能得到帮助

我只需分配/初始化PieChartViewController并将其视图添加到主视图中。这通常效果很好


它可能工作得很好,但不要这样做。这是对UIViewController的滥用。在这里查看我的答案:

也许你应该展示一些代码——初始化PieChartViewController并将其添加到字典中的方法。这本字典正在被解除分配吗?自从在iOS obj-c中实现ARC-memory管理以来,再也没有什么值得大惊小怪的了。但是,正如他所说:为了得到一个好的答案,你应该发布一些代码或提供更多细节(但不是以海明威小说的方式)。事实上,一些代码是最好的。@rokjarc-事实上,在ARC之前,我们确切地知道该告诉那个人做什么--
保留对象,然后在不再需要时释放它。自ARC以来,决定如何修复奇怪的情况往往更加困难。@HotLicks:是的,这是真的。当时,一个程序员有责任感,对这一点也有更多的控制。当新的(obj-c)程序员遵循旧的(好的)教程时,我的评论实际上是出于一些问题。由于ARC通常使用
performSelector:afterDelay:0.1
修复了80%的故障:)这样做是否可以接受实际上是我的另一个问题,感谢您的澄清。你建议怎么做?图表需要一个代理来管理其数据和外观。我希望每个图形都包含在一个对象中,它们的数据、名称和一些手势都存储在一起,而不必处理来自父视图控制器的多个图形的数据。这就是为什么我选择添加几个视图控制器,就像它们是UI元素一样。有什么建议吗?看看我给你的链接。您可以创建自己的视图控制器及其视图层次结构,但必须采用正确的方法,使用适当的父子视图控制器体系结构,并在操作视图时发送所有正确的消息。