【发布时间】:2013-04-24 21:38:44
【问题描述】:
我想在我使用核心图创建的应用程序中放置多个饼图。我创建了一个包装类(我们称之为PieChartViewController),它是一个视图控制器,并设置了图形以及一些按钮和动作以使图形具有交互性。为了部署它,我通常只在另一个持有PieChartViewController 的视图控制器上创建一个属性,当我初始化这个视图控制器时,我只需分配/初始化PieChartViewController 并将其视图添加到主视图。这通常工作正常。
问题是,在另一个视图上,我想向视图添加可变数量的图形,而这个数量是在初始化视图控制器时确定的。我有一个初始化每个PieChartViewController 并将其添加到父级上的NSMutableDictionary 的方法,以便我可以保留对它们的引用。但是,这似乎并没有让它们保持活力,因为我总是遇到 BAD_ACCESS 2 崩溃,并且在运行仪器时我意识到它们被释放了。
因此,当PieChartViewControllers 存储在一个属性上时,一切都很好,但是当我将它们放入字典时,它们似乎没有保持足够长的时间。我仍然不太熟悉objective-c中的内存管理,我不确定如何去做,希望能提供任何帮助。
【问题讨论】:
-
也许你应该展示一些代码 - 初始化 PieChartViewControllers 并将它们添加到字典中的方法。字典被释放了吗?你是怎么坚持下来的?
-
自从 ARC 实施以来,iOS obj-c 中的内存管理不再是一件可怕的事情。但是,正如他所说:您应该发布一些代码或提供更多细节(但不是以海明威小说的方式)以获得好的答案。实际上,最好有一些代码。
-
@rokjarc - 实际上,在 ARC 之前,我们会确切地知道该告诉那个人该做什么 --
retain对象,然后是release它不再需要时。由于 ARC,通常更难决定如何解决奇怪的情况。 -
@HotLicks:是的,这是真的。当时有责任的程序员对此也有更多的控制权。当新的(对于 obj-c 的)编码人员遵循旧的(和好的)教程时,我的评论实际上是由一些问题引起的。由于 ARC 通常使用
performSelector:afterDelay:0.1修复了 80% 的故障 :)
标签: iphone ios objective-c xcode memory-management