稍后释放动态对象

时间:2013-09-26 12:25:22

标签: ios arrays pointers dynamic

我有以下问题。

假设我有一个名为“ModuleViewController”的UIViewController类,它包含多个动态创建的UIButtons和多个动态创建的Mpmovieplayer控制器。这些对象中的每一个都有其Callback函数,包含在“ModuleViewController”类中。所有UIButton和一个所有Mpmovieplayer控制器都有一个回叫。

现在我想在UIScrollview中添加多个“ModuleViewController”类实例。 我不使用ARC 。如果我在分配它们并在我的“ModuleViewController”类中初始化它们之后释放这些对象,则按钮和视频不会播放或者应用程序崩溃。

目前我的解决方案是让NSMutableArray在创建时存储它们的指针,然后在我以后的状态下释放“ModuleViewController”类时释放它们。 (e.x。从UIScrollview的视口离开屏幕时释放“ModuleViewController”类)

例如。如果我的数组包含指针是“objectsRetained”

//在ViewDidLoad上创建fPointers数组

NSMutableArray *objectsRetained = [[NSMutableArray alloc] init];

。 。 //在数组中添加对象指针,以便在以后的状态下释放它

[objectsRetained addObject:[NSValue valueWithPointer: myObject]];

这个解决方案有效,但是当我分析我的应用程序时,它表明该区域存在可能的内存泄漏。

还有另一种解决方法吗?

1 个答案:

答案 0 :(得分:0)

首先,使用ARC。

但在这种情况下,问题似乎出现在额外的NSValue包装器中。只需将按钮直接放在NS(Mutable)Array中即可。该阵列将为您保留按钮。在-dealloc中,致电[buttons release]。这将释放按钮。没有必要将这些东西捆绑到值对象中。

And then switch to ARC.(但方法完全相同;那么你只需要dealloc。)