2012-03-19 36 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