这两个片段是否完成了同样的事情?假设我的界面文件中有三个名为buttonOne,buttonTwo和buttonThree的IBOutlet UIButtons:
- (void)dealloc {
for(UIButton* idx in self.view.subviews)
[idx release], idx = nil;
[super dealloc];
}
和
- (void)dealloc {
[buttonOne release], buttonOne = nil;
[buttonTwo release], buttonTwo = nil;
[buttonThree release], buttonThree = nil;
[super dealloc];
}
编辑:
由于ARC有时似乎是iOS中内存管理的一种解决方案,我更喜欢不使用它,因为a)我觉得我在欺骗b)如果我没有弄错,它只适用于iOS 5设备
答案 0 :(得分:5)
假设您没有任何其他子视图,那么这两段代码就会做同样的事情。但这不是你应该做的事情。
您应该声明您的商店weak
(如果使用ARC)或assign
(如果不使用ARC)。然后您不必在dealloc
中释放它们。 UIView
保留其子视图并在取消分配时释放它们,因此您无需保留或释放它们。您只需发布self.view
(或者,如果您是UIViewController
的子类,则让[{1}}负责发布[super dealloc]
)。
答案 1 :(得分:0)
不,他们不这样做,第一个将通过视图子视图中的所有视图,所有foreach都会将其转换为UIButton,但是您正在迭代视图子视图数组的整个内容..您应该这样做< / p>
- (void)dealloc {
for(UIButton* idx in self.view.subviews)
{
if([idx isKindOfClass:UIButton])
{ [idx release] }
}
[super dealloc];
}
答案 2 :(得分:0)
是和否 如果您有任何其他视图作为子视图,那么这些视图也将在第一种方法中释放,但不会在第二种方法中释放。 否则,如果只有按钮是子视图,那么这两个东西将具有相同的结果。
我建议您查看ARC,这样您就不必担心任何内存管理业务。