Ios 何时使用removeFromSuperview?

Ios 何时使用removeFromSuperview?,ios,objective-c,Ios,Objective C,在objective-C中编程对象时,我有一个小问题。我有一个应用程序,它几乎是完整的,而且一切都很好。我的问题是,我将对象设置为零,并在适当的时间释放它们 但这是否足够,或者我应该在何时何地使用removefromsuperview 在将UIButton添加到UITableViewCell的情况下,我使用以下代码添加UIButton: UIButton *buttonReset = [UIButton buttonWithType:UIButtonTypeContactAdd]; button

在objective-C中编程对象时,我有一个小问题。我有一个应用程序,它几乎是完整的,而且一切都很好。我的问题是,我将对象设置为零,并在适当的时间释放它们

但这是否足够,或者我应该在何时何地使用removefromsuperview

在将UIButton添加到UITableViewCell的情况下,我使用以下代码添加UIButton:

UIButton *buttonReset = [UIButton buttonWithType:UIButtonTypeContactAdd];
buttonReset.frame = CGRectMake(250.0f, 7.0f, 75.0f, 30.0f);
[cell addSubview:buttonReset];
buttonReset addTarget:self action:@selector(resetSettings) forControlEvents:UIControlEventTouchUpInside];
buttonReset = nil;
[buttonReset release];
我也需要使用吗

[buttonReset removeFromSuperview];

在这种情况下?

您应该只使用

[buttonReset removeFromSuperview];
然后

buttonReset = nil;
正如苹果公司所说

如果接收器的superview不是nil,则superview将释放接收器。如果计划重用视图,请确保在调用此方法之前保留该视图,并在适当的情况下稍后再次释放该视图

buttonReset = nil;
[buttonReset release];

中,您应该只使用

[buttonReset removeFromSuperview];
然后

buttonReset = nil;
正如苹果公司所说

如果接收器的superview不是nil,则superview将释放接收器。如果计划重用视图,请确保在调用此方法之前保留该视图,并在适当的情况下稍后再次释放该视图

buttonReset = nil;
[buttonReset release];

否中,您不应调用
[buttonReset removeFromSuperview]
,至少不是马上:如果您这样做,按钮将从屏幕上消失(给定方法的名称,这应该不会令人惊讶)。此外,您不需要将按钮设置为
nil


当需要从屏幕上删除控件时,需要调用
removeFromSuperview
。如果同时释放它,则表示控件的对象将被销毁。例如,如果您以编程方式为特定任务添加了一个按钮,并且在任务完成后必须删除该按钮,则调用
removeFromSuperview
是合适的。

否,您不应该调用
[buttonReset removeFromSuperview]
,至少不是马上:如果您这样做,按钮将从屏幕上消失(给定方法的名称,这应该不会令人惊讶)。此外,您不需要将按钮设置为
nil

buttonReset = nil;
[buttonReset release];

当需要从屏幕上删除控件时,需要调用
removeFromSuperview
。如果同时释放它,则表示控件的对象将被销毁。例如,如果以编程方式为特定任务添加了按钮,并且在任务完成后必须删除该按钮,则调用
removeFromSuperview
是合适的

buttonReset = nil;
[buttonReset release];
这没有道理。将指针设置为
nil
(空指针),然后向其发送消息。在大多数其他语言中,这将导致崩溃。在Objective-C中,这是允许的,但不会发生任何事情。在设置为
nil
之前,必须
release
。但在这种情况下,您不应该同时执行这两项操作,因为
buttonReset
是一个自动释放的对象(您没有使用alloc/init创建它),所以您不拥有它,因此您不能释放它

在这种情况下,您也不必使用
removeFromSuperview
。将按钮(子视图)添加到单元格(超级视图)。superview将保留按钮的强(保留)参考。然后释放单元时,它还将处理其所有子视图。您只需要在实际需要时自己删除它,而不是出于内存管理的原因

如果你还不知道,你可能想考虑将来使用。

这没有道理。将指针设置为
nil
(空指针),然后向其发送消息。在大多数其他语言中,这将导致崩溃。在Objective-C中,这是允许的,但不会发生任何事情。在设置为
nil
之前,必须
release
。但在这种情况下,您不应该同时执行这两项操作,因为
buttonReset
是一个自动释放的对象(您没有使用alloc/init创建它),所以您不拥有它,因此您不能释放它

在这种情况下,您也不必使用
removeFromSuperview
。将按钮(子视图)添加到单元格(超级视图)。superview将保留按钮的强(保留)参考。然后释放单元时,它还将处理其所有子视图。您只需要在实际需要时自己删除它,而不是出于内存管理的原因


如果你还不知道它,你可能想考虑在将来使用。

< p>调用<代码> ReaveFuxVIEW < /C> >使视图从它的超级视图中删除。这将使目标视图及其包含的所有视图从屏幕上消失

在您的情况下,我只需将对象设置为nil,就可以处理它了

里面有一些有趣的信息

但值得深入研究,因为这是一个非常重要的问题 ObjC中的概念。你不应该对你想要的对象调用-release 没有-显式或隐式保留(通过调用三者之一 神奇的词语)。您不需要调用-release来解除分配 对象你调用它来释放你对物体的控制。 scrollview是否保留其子视图与您无关(it 保留其子视图,但仍然不是您的业务)。是否 -removeFromSuperview调用-发布也不关你的事。这在scrollview及其子视图之间。重要的是你 关心对象时保留对象,停止时释放对象 关心他们,让系统的其他部分来照顾他们 保留和释放它所关心的东西


对视图调用
removeFromSuperview
,会导致该视图从其superview中删除。这将使目标视图及其包含的所有视图从屏幕上消失

在您的情况下,我只需将对象设置为nil,就可以处理它了

里面有一些有趣的信息

但值得深入研究,因为这是一个非常重要的问题 ObjC中的概念。你应该