2012-03-19 8 views
6

次のシングルトンクラス(SharedManager)ヘルパーメソッドによって保持サイクルが発生している可能性があります。静的アナライザーでの警告の取得:「行に割り当てられたオブジェクトの潜在的なリーク...」どのように修正できますか?ARCで潜在的なメモリリークを修正しました

私はivar uuid __weakを作ってみましたが、解析すると警告が表示されます。警告を削除

myUUID = [SharedManager generateUUID]; 



+ (NSString *)generateUUID 
{ 

CFUUIDRef uuidObject = CFUUIDCreate(kCFAllocatorDefault); 
NSString *uuid = (__bridge NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); 
CFRelease(uuidObject); 

    return uuid; 

} 

答えて

6
NSString *uuid = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); 

ん:そうのような

NSString *__weak uuid = (__bridge NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); 

おかげクラスで呼び出される

?ここで

+0

ピーター、はい、それはやりました。ありがとう。 __bridge_transferが何を意味するのかを理解する必要があります。 – Slinky

+0

http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.casts –

+0

パーフェクトをご覧ください。ありがとうございました – Slinky

7

はそれらを解放する方法です:

- (NSString *) uuid 
{ 
    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
    CFRelease(uuidRef); 
    NSString *uuid = [NSString stringWithString:(NSString *) 
    uuidStringRef]; 
    CFRelease(uuidStringRef); 
    return uuid; 
} 

出典:http://www.cocoabuilder.com/archive/cocoa/217665-how-to-create-guid.html

関連する問題