ios - 在 IBOutlet (UIImageView) 之后释放内存

标签 ios memory-management iboutlet

我在 ViewController 中有一个 IBOutlet UIImageView*。释放 Controller 后(我不再需要它了),UIImageView* 的 retainCount 为 2(代码没有任何保留),甚至在两次释放后 [我认为,这完全错误] (在 Controller 中 dealloc) UIImageView 内存仍然分配。为什么会发生,我的问题是 - 在使用 IBOutlets dealloc UIViewController 后如何完全释放内存?

@interface GRULogInController (){
    IBOutlet UIImageView* bgImage;
}
@end
@implementation GRULogInController
....

- (void)viewDidUnload
{
    NSLog(@"%d", bgImage.retainCount); // Shows 2 !!!
    [bgImage release];
    [bgImage release]; // Object releases but memory not freed (It shown in Instruments)

    [super viewDidUnload];
}

- (void) dealloc
{
    [self viewDidUnload];
    [super dealloc];
}

最佳答案

首先看一下这个链接。 whentouseretaincount.com
它只是没有提供任何有用的信息。

其次,iOS 在需要内存时清除 viewController,而不是在您释放 viewController 后立即清除。
你不应该释放 imageView 两次,让 viewController 处理它。

另一件事是 viewDidUnload 已被弃用,您应该改为在 dealloc 中执行代码。

关于ios - 在 IBOutlet (UIImageView) 之后释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044642/

相关文章:

ios - 使用 Core Data 在表格 View 中编辑行位置

ios - "UIKeyboardWillShowNotification"iPad mini收不到

ios - 对 IBOutlet 使用强/保留的缺点?

ios - 如何从 View Controller 中选择 Storyboard中的 UIImage

ios - 新目标未识别 IBOutlet

ios - 将 Obj-C 观察器转换为 Swift 语法时遇到问题

ios - 添加SceneDelegate并更新Info.plist后黑屏

java - 字符串文字池是对字符串对象的引用的集合,还是对象的集合

c - posix_memalign 捕获信号吗?

c# - 使用 DotTrace 问题进行内存分析