我有UIView
的类别,其中包含此方法以删除其所有subviews
:
- (void)empty {
for (UIView *subview in self.subviews) {
[subview removeFromSuperview];
}
}
在分析我的项目时,我看到多个内存泄漏都指向此代码:
[wrapperView empty];
反过来调用第一种方法。
我在Google上搜索了一个更清晰,更好的解决方案:
[self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
不会造成内存泄漏。
我的问题是,为什么旧的解决方案会造成内存泄漏? UIView *subview
循环结束时for
是否已发布?
答案 0 :(得分:1)
在第一种方法中,您在迭代数组时改变数组,在第二种方法中,您只是向数组中的每个对象发送一条消息。
要自己查看,请使用
替换第一种方法NSArray *subviews = self.subviews.copy;
for (UIView *view in subviews) {
[view removeFromSuperview];
}
这样您就可以处理子视图数组的副本。