我有一些嵌套在 UIView 中的 UIImageView,它们将它们组合在一起。它们由 View Controller 拥有。一旦调用 -viewWillDisappear 方法,我想将那些 UIImageView 及其 UIView 一起删除,以便释放内存。
我对包含 UIImageViews 作为 subview 的 UIViews 调用 -release 。没有其他东西拥有 UIImageViews。我所拥有的只是 UIView 的一个实例变量,它将 UIImageViews 分组在一起。
因此,当我向它发送 -release 时,保留计数应该变为 0。但这并不能保证我获得更多可用内存,对吧?所以,我也设置了 myUIView = nil。这有帮助/有用吗?如何安全地释放内存?
最佳答案
对于这种情况,在 -viewDidDisappear
(不是 -viewWillDisappear
;此时您仍在屏幕上)中最好的做法是调用 self. View =零
。这将转储整个 View Controller 的 View ,下次需要时将自动重新加载。
如果这些 View 上有任何 IBOutlet,您也需要将它们设置为 nil,否则它们将不会释放。假设您有这样的设置:
@interface MyViewController : UIViewController
{
UIImageView *_imageView;
}
@property (readwrite, retain) IBOutlet UIImageView *imageView;
@implementation MyViewController
@synthesize imageView = _imageView;
然后你需要在`-viewWillDisappear中调用self.imageView = nil
。
您通常不应在 ivars 上调用 -release
,除非在它们的访问器和 -dealloc
中。释放它们的正确方法是使用访问器将它们设置为 nil。
当retainCount为1时调用-release
会立即调用free()
,从而回收内存。但请记住,其他事物可能会保留该对象,包括自动释放池,因此您可能不确定在任何给定时间的保留计数是多少。
我强烈建议人们在释放变量时立即将其设置为 nil。这不会影响变量;它只是保护您免于追逐已释放的指针,因此现在可能指向未分配的内存。因此,在 -dealloc
中,我的行如下所示:
[_stuff release]; _stuff = nil;
[_otherStuff release]; _otherStuff = nil;
关于iphone - 如何通过从屏幕上删除 UIImageViews 来安全地释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903808/