繁体   English   中英

设备不在模拟器中的内存泄漏

[英]memory leak in device not in simulator

我已经检查过仪器,没有发现任何内存泄漏。 当我检入设备时,它显示了负责任的调用者-[NSKeyedUnarchiver encodeObjectForKey:]的内存泄漏,并且对象是UIRoundedRectButton。

我仍然没有使用NSKeyedUnarchiver或任何类型的解码。 是下面的代码,对此内存泄漏负责吗?

- (void)saveToFile:(NSString *)pinStr
{
 NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); 
 NSString *documentsDirectoryPath = [paths objectAtIndex:0]; 
 NSString *path = [documentsDirectoryPath stringByAppendingPathComponent:@"smsbrain.plist"]; 

 NSMutableDictionary *data = [[NSMutableDictionary alloc] init];
 [data setObject:@"User" forKey:@"username"];
 [data setObject:@"password" forKey:@"password"];
 [data setObject:pinStr forKey:@"pin"];
 [data writeToFile:path atomically:YES];
 [data release];
}

或者我已经检查过互联网以及关于stackoverflow的一些帖子,但找不到任何更好的解决方案。

我没有在viewdidunload和dealloc方法中将outlet设置为nil。 有什么问题吗?

发生此泄漏时,我的应用程序隐藏了背景。 并在控制台上收到警告“内存水平不正常(20%)”

因此,对于tableviewcontroller的背景不可见的问题该怎么办。 它在模拟器上工作正常。 但是有时隐藏背景的设备有什么问题。

请帮我...

如果您不对自己执行任何NSCoding,则负责任的调用者很可能是正在解码其nib文件的UIViewController。 您收到的内存警告符合此假设。

发出内存警告时,如果不可见(没有超级视图),则UIViewController的标准实现将释放其视图。 结果,该视图的所有子视图将收到释放消息,如果没有人保留它们,则将其释放。 但是通常viewController至少会通过IBOutlet属性保留其某些视图子视图。 这是viewDidUnload发挥作用的地方。 在视图卸载后立即调用它(主要是由于内存警告)。 这是您真正应该释放视图的所有保留子视图的地方。 那就是您在viewDidLoad创建的每个IBOutlet和其他viewDidLoad 真的没有必要抱住他们。 它们将在需要时从笔尖全部重新创建。

在您的dealloc方法中,您必须释放所有不保留属性的保留属性和所有保留ivars。 请阅读《 内存管理编程指南》

如果这没有帮助。 我们将需要您的属性声明以及有问题的Controller的viewDidLoad,viewDidUnload和dealloc方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM