发布子视图

时间:2009-03-17 01:11:44

标签: iphone

我有一个UIScrollView,它有多页信息,作为子视图添加到scrollView。每个subView的控制器都存储在scrollViewController中的NSMutableArray中。

我在子视图中有一些内存泄漏,我试图通过确保调用每个子视图控制器的dealloc方法来修复它们。我是通过从scrollView控制器的dealloc方法中释放视图控制器来实现的。

当我尝试在释放子视图控制器后释放数组时,应用程序崩溃。

代码如下......我做错了什么?

- (void)dealloc {

// Loop through the array of subView controllers and release them
for ( int i = 0; i < [viewControllers count]; i ++ ) {
    [[viewControllers objectAtIndex:i] release];
}

[viewControllers release];  // Crashes here unless I remove the loop above
[scrollView release];
[pageControl release];
[theKnot release];
[super dealloc];

}

2 个答案:

答案 0 :(得分:4)

NSMutableArray获取它包含的对象的所有权 - 它在添加时会增加引用计数,并在释放自身时释放它们的对象。

假设您在将每个视图控制器放入viewControllers数组后释放或自动释放它们,则无需在viewControllers中循环对象并释放它们 - 数组将为您执行此操作。< / p>

释放阵列时崩溃,因为阵列试图释放已经释放但现在无效的对象。

答案 1 :(得分:1)

NSArray在解除分配后释放其内容,因此对象将在循环中释放 - 这可能是释放它们 - 然后是数组。

如果您打算创建iPhone应用,则应阅读Apple的memory management guide。这并不难,但这是你必须学习的东西。否则你会得到泄漏和崩溃,并且不知道为什么。一旦你理解了Cocoa的一些简单规则,一切都会很清楚。