【发布时间】:2012-08-16 01:55:13
【问题描述】:
我有两个问题,但让我们先从更容易混淆的问题开始。
-(void)OnNewFrameData:(NSData *)FrameData
{
UIImage * I = [UIImage imageWithData:FrameData];
[I release];
}
如果我不释放I,我会遇到内存泄漏。然而,我从未保留I。有人可以解释一下吗? (FrameData 完全由调用者管理。)
然后我还有一个关于保留属性的问题。取上面相同的代码,将I分配给保留属性J,然后将nil分配给相同的保留属性,应该没有任何泄漏,但我又泄漏了内存。我也可以释放保留的属性,但我仍然会泄漏。
@property (retain) UIImage * J;
...
-(void)OnNewFrameData:(NSData *)FrameData
{
UIImage * I = [UIImage imageWithData:FrameData];
self.J = I;
// I can also add here [self.J release]; and it still leaks...
self.J = nil;
[I release];
}
非常感谢从我从文档和 stackoverflow 的线程中学到的知识中了解这两个令人困惑的明显矛盾。
【问题讨论】:
-
你如何确定你的内存是否泄漏?
-
两三分钟后(不超过)我收到两个内存警告,1 和 2,然后程序被 iOS 退出。视频帧的大小很大,所以我认为它们正在消耗内存并且没有被释放。我可以运行相同的代码大约半小时,并且没有收到任何警告,表明我没有泄漏内存。有更好的方法吗?
-
使用 Xcode 提供的工具工具:raywenderlich.com/2696/…
-
仪器工具崩溃了,根本没有说明为什么我会收到内存警告。或者至少它的神秘信息没有给我太多任何线索。
标签: objective-c ios