我遇到了这段代码
UIImageView *image = [[UIImageView alloc] initWithFrame:imageFrame];
[image setImage:[UIImage imageNamed:@"myImage"]];
[self.view addSubview:image];
image = nil;
鉴于未使用ARC,我认为它会导致image
对象上的内存泄漏。
然而静态分析仪并没有发现它。
我想知道谁错了,静态分析仪还是我,我想对此发表第二意见。
以上代码是否实际泄漏?
答案 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}}的引用计数器将会丢弃并且内存将被释放。我认为你不能以这种方式造成泄漏:)