2012-03-19 35 views
6

以下單例類(SharedManager)輔助方法可能會導致保留週期。在靜態分析器中獲取警告:「在線路上分配的對象的潛在泄漏...」我該如何解決?修復ARC中潛在的內存泄漏

我確實試過讓伊娃uuid __weak但我分析時仍然會出現警告。

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

感謝

被稱爲班上像這樣:

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); 

這是否刪除警告?

+0

彼得,是的,的確如此。謝謝。需要了解__bridge_transfer是什麼。 – Slinky 2012-03-19 21:39:41

+0

看看http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.casts – 2012-03-19 21:43:08

+0

完美。謝謝 – Slinky 2012-03-19 21:46:05

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