静态分析仪未检测到内存泄漏

时间:2013-06-24 09:28:27

标签: objective-c memory-management memory-leaks

我遇到了这段代码

UIImageView *image = [[UIImageView alloc] initWithFrame:imageFrame];
[image setImage:[UIImage imageNamed:@"myImage"]];
[self.view addSubview:image];
image = nil;

鉴于未使用ARC,我认为它会导致image对象上的内存泄漏。 然而静态分析仪并没有发现它。

我想知道谁错了,静态分析仪还是我,我想对此发表第二意见。

以上代码是否实际泄漏?

2 个答案:

答案 0 :(得分:1)

原来错误的是我(呃!)

我审核的应用程序非常庞大,我错过了开发人员在特定类上使用-fobjc-arc标志启用ARC的事实,包括上面的代码片段。

静态分析仪万岁!

答案 1 :(得分:0)

self.view有一系列指向其子视图的指针,可以使image可访问,并使参考计数器(用于ARC)保持在0以上。

CGRect imageFrame = CGRectMake(100, 100, 100, 200);
UIImageView *image = [[UIImageView alloc] initWithFrame:imageFrame];
NSLog(@"image=%@", image);
[image setImage:[UIImage imageNamed:@"Default"]];
[self.view addSubview:image];
image = nil;

UIView *v = [[self.view subviews] objectAtIndex:0];
NSLog(@"v=%@", v);

当您self.view = nil; image时,{{1}}的引用计数器将会丢弃并且内存将被释放。我认为你不能以这种方式造成泄漏:)