iphone - 如何通过从屏幕上删除 UIImageViews 来安全地释放内存?

标签 iphone cocoa-touch memory-management uikit

我有一些嵌套在 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/

相关文章:

iOS:如何在 UI 元素处理事件之前拦截触摸事件

c# - C#中小数据类型是如何打包的

iphone - 如何创建水平透明滚动条?

iphone - 在 iPhone 中下载图像时在 UIProgressView 中显示准确的进度

ios - 将 indexpath 存储在自定义 UITableViewCell 中

iphone - 在自定义导航栏中设置栏按钮项目颜色

C 2D 字符串数组在其声明的函数之外导致段错误

c - 在同一内存空间中打开两个程序

iphone - 如何扩大UIGestureRecognizer的点击区域?

iphone - xcode 该团队中已存在编号为该设备的设备。