2012-03-08 11 views
1

プロジェクトをARCに変換し、リークインスツルメントではこの機能にリークとして繰り返しタグが付けられます。ARCリーク機能

私は、objc_releaseはおそらく解決策だと思っていましたが、xCodeはそれを好まないと思いました。関数内で呼び出さ

- (int)getNumber{ 
int result = 0; 



unsigned char *myBytes = (unsigned char *)malloc(sizeof(char)); 
[stream getBytes:myBytes range:NSMakeRange(0, sizeof(char))]; 

char tag = myBytes[0]; 

if((int)tag >= 0){ 

    result = (int)tag - 64; 
} 
else if ((int)tag == -64) { 

    [self removeChar]; 

    result = [self getInt]; 


} 
else 
{ 

    [self removeChar]; 
    unsigned char *byteTwo = (unsigned char *)malloc(sizeof(char)); 
    [stream getBytes:byteTwo range:NSMakeRange(0, sizeof(char))]; 
    char twoTag = byteTwo[0]; 

    result = 
    ((((int)tag & 0x03f) << 8) | 
    (twoTag & 0x0ff)) ; 
    result -= 8192; 

} 

return result; 

}

二つの機能は

- (void)removeChar{ 
[stream replaceBytesInRange:NSMakeRange(0, 1) withBytes:NULL length:0]; 

}

- (int)getInt{ 
NSRange intRange = NSMakeRange(0,3); 

char buffer[4]; 
[stream getBytes:buffer length:4]; 

[stream replaceBytesInRange:intRange withBytes:NULL length:0]; 


return (int) (
       (((int)buffer[0] & 0xff) << 24) | 
       (((int)buffer[1] & 0xff) << 16) | 
       (((int)buffer[2] & 0xff) << 8) | 
       ((int)buffer[3] & 0xff)); 

}あります

+2

'malloc'は' free'ですか?それは漏れのように見える...しかし、おそらく私は理解していないことが起こっている何かがあります。スタティック・アナライザは何を表していますか? – matt

答えて

3

あなたは今までにMyBytesとbyteTwoを削除していますか? Arcがそのレベルでメモリ管理を扱っていないことは私の理解ですか?

LLVM Arc

+1

うわー、ARCは 'malloc()'を混乱させることはありません。オブジェクトだけです。 –

+0

ありがとうteamaxe - free(myBytes)とfree(byteTwo)がすべてをクリーンアップしました。それ以上の漏れはありません! –

関連する問題