我在某处读到 - 关于内存不足警告并放弃不可见的 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/