iphone - 为什么要写[anView release], anView = nil;而不是 [anView 发布];?

标签 iphone cocoa-touch memory-management uikit

我在某处读到 - 关于内存不足警告并放弃不可见的 View 及其所有 subview (=整个 Nib ,我认为),你应该这样做:

-(void)dealloc {
    [anView release], anView = nil;
    [someImageView release], someImageView = nil;

    [super dealloc];
}

而不是

-(void)dealloc {
    [anView release];
    [someImageView release];

    [super dealloc];
}

在我调用release之后,将这些指针接地到nil(=“无对象”)的原因是什么?让我猜一下:其他一些方法可能会出于某种原因保留 View (任何人都可以举出这种情况何时发生的例子吗?),然后 didReceiveMemoryWarning 事情发生,并且您释放当前不可见的整个 nib+view (即在多 View 应用程序中)。一旦用户想要再次看到该 View ,您将快速再次加载 Nib ,然后:它加载所有 View ,连接 socket ,然后砰!您的其他保留 View 现在挂起,没有任何指针孤独地位于内存块中,导致大量内存泄漏,直到您的应用程序崩溃。

对/错?

最佳答案

原理比UIView更通用。事实上它比 Objective-C/Cocoa -release 方法更通用。它对于 C malloc()/free() 内存函数也有效。

当您不再需要某个对象或任何内存区域时,首先释放/释放它。然后,为了确保您不会再次使用它,您可以通过将 nil 分配给对象或将 NULL 分配给对象来清除访问该对象或内存区域的方法。内存指针。

关于iphone - 为什么要写[anView release], anView = nil;而不是 [anView 发布];?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/805915/

相关文章:

iphone - 视网膜显示屏 iphone 的图像

ios - 设置选项 View 属性的属性时出现 EXC_BAD_ACCESS

iphone - 处理drawRect多次调用

ios - 绕圈旋转

c++ - 游戏引擎的分配器

ios - 如何在 IOS Delphi 上的 TWebbrowser 中设置用户代理

iphone - 是否有适用于 Android 或 iPhone 的图像效果库(例如 lomo)?

delphi - FastMM:分配的总内存

c# - new 是否总是在 C++/C#/Java 中的堆上分配

iPhone "Share"按钮