簡體   English   中英

靜態分析器未檢測到內存泄漏

[英]Memory leak not detected by static analyzer

我碰到了這段代碼

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

鑒於未使用ARC,我認為它將導致image對象上的內存泄漏。 但是,靜態分析器無法捕捉到這一點。

我想知道是誰錯了,還是靜態分析儀,我想對此發表第二意見。

上面的代碼是否真的泄漏?

原來一個人誤會是我((!)

我正在審核的應用程序非常大,並且我錯過了開發人員在特定類上啟用帶有-fobjc-arc標志的ARC的事實,包括上述代碼段中的一個。

靜電分析儀萬歲!

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的參考計數器將下降,並且內存將被釋放。 我認為您無法通過這種方式造成泄漏:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM