1

ですから、私はオープンソースプロジェクトで見られるこの方法を持っています。静的アナライザーを実行しようとしたときに、なぜこれがメモリをリークしないのか、頭がおかしくなります。リークするはずだと思う理由は、メモリを割り当てているのに解放しないからです。メソッドが呼び出されるたびに解放されます(= 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;
}
4

2 に答える 2

5

アナライザーはstaticストレージ修飾子を認識し、それが範囲外に出ないことを理解します (もちろん、終了するまで)。

メソッドが呼び出されるたびに解放されます (=nil のため)。

そうではありません。これは、メソッドが初めて呼び出されたときに発生します。つまり、1 回だけですstatic

于 2012-04-20T17:46:16.047 に答える
2

exp は静的であるため、アナライザーは文句を言いません。静的なしで再度分析を試みると、苦情が発生します。(Xcode でこれを確認しました - ARC をオフにします。)

静電気とは何かを考えてみると、不満がない理由がわかります。この変数がオブジェクトを指しているままになることをコンパイラに伝えています。オブジェクトを指しているものがなく、メモリを解放する機会がない場合は、リークにすぎません。

于 2012-04-20T17:47:26.003 に答える