簡體   English   中英

為什么這個NSMutableSet不會泄漏內存

[英]why isn't this NSMutableSet leaking memory

因此,我在開放源代碼項目中看到了這種方法,這讓我感到困惑,為什么當我嘗試運行靜態分析器時,這種方法不會泄漏內存。 我認為它應該泄漏的原因是因為它正在分配內存,但從不釋放內存。 每次調用該方法時都會釋放它(由於= nil)。 誰能為我照亮?

- (BOOL)isValid(NSString *)name
{
    // Using a set so access is faster
    static NSMutableSet *exp = nil;

    // Setup the set once with AB testing info
    if (exp == nil) {

            exp = [[NSMutableSet alloc] initWithCapacity:5];

    }

    if (exp != nil) {
        return YES;
    }

    return NO;
}

分析器可以識別static存儲限定符,並且知道它不會超出范圍(當然,直到終止)。

每次調用該方法時都會釋放它(由於= nil)。

不是。 在第一次調用方法時發生-僅因為它是static而發生一次。

分析器沒有抱怨,因為exp是靜態的。 再次嘗試進行靜態分析,您會收到投訴。 (我剛剛在Xcode中對此進行了驗證-禁用了ARC。)

考慮一下什么是靜態的,您會明白為什么沒有抱怨。 您告訴編譯器此變量將一直指向該對象。 如果不再有任何指向該對象的東西並且沒有釋放內存的機會,那只會是一個泄漏。

暫無
暫無

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

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