2
我敢肯定,静态分析可能是在这种情况下正确的,但我不明白为什么...Xcode分析器报告泄漏与ARC - 建议如何解决?
下面是一个关于UUID类的代码段:
@interface UUID {
CFUUIDRef uuidRef;
}
@end
@implementation UUID
- (id) initWithString:(NSString*)string {
if (string && [NSNull null] != (NSNull*)string)
return [self initWithCFUUID:CFUUIDCreateFromString(kCFAllocatorDefault, (__bridge CFStringRef) string)];
else
return nil;
}
- (id) initWithCFUUID:(CFUUIDRef)uuidRef {
if (self = [super init]) {
self->uuid = uuidRef;
}
return self;
}
@end
Xcode中有在第一次初始化中报告了“返回”行中的泄漏。屏幕截图可以找到here。
我有桥,bridge_retain和bridge_transfer一个基本的了解,但我相信桥是在这种情况下的正确选择。
如果我的理解是正确的,任何人都可以提出建议,以我是否错误地这样做呢?另外,我将如何去解决这个问题?
问候, 尼克
我怕我不明白这一点。如果CFUUIDCreateFromString()函数返回保留计数为+1的对象,那么肯定释放会释放它?如果我将它添加到我的代码中,那么它会崩溃,正如我所期望的那样...? – 2012-03-26 00:17:07
在你的'UUID'类中,'-initWithCFUUID:'方法应该保留'CFUUIDRef'。你也应该重写'-dealloc'并在那里释放'CFUUIDRef'。这只是基本的保留/释放惯例。 – 2012-03-26 00:45:07
@dark_perfect哎呀,我没注意你如何通过它传递给'initWithCFUUID'保持'UUID'对象。在'自> UUID = uuidRef;'线可能应该是'自我> uuidRef = uuidRef;',也假定接口的声明是正确的(没有'uuid'构件那里)。我把我的答案换成了应该工作的东西。 – dasblinkenlight 2012-03-26 01:05:12