2
내가 정적 분석기는이 경우에 맞을 확신하지만, 왜 아주 이해가 안 ... 여기 Xcode Analyzer는 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
엑스 코드가있다 첫 번째 초기화에서 'return'행에 누수가 있다고보고했습니다. 스크린 샷은 here입니다.
저는 bridge, bridge_retain 및 bridge_transfer에 대한 기본 지식을 가지고 있지만이 경우 다리가 올바른 선택이라고 생각합니다.
내 이해가 정확하다면 누구나 내가 잘못했는지 여부를 조언 할 수 있습니까? 또한, 어떻게 해결할 것인가?
안부, 닉
나는이 이해가 안 난 두려워. CFUUIDCreateFromString() 함수가 보유 개수가 +1 인 객체를 반환하면 반드시 해제하면 할당이 해제됩니다. 이 코드를 코드에 추가하면 예상대로 충돌이 발생합니다 ...? –
'UUID' 클래스에서,'-initWithCFUUID :'메소드는'CFUUIDRef'를 유지해야합니다. '-dealloc'을 오버라이드하고 거기서'CFUUIDRef'를 해제해야합니다. 이는 기본 유지/해제 규칙 일뿐입니다. –
@dark_perfect'UUID' 객체를 어떻게'initWithCFUUID'에 건네 주 었는지주의를 기울이지 않았습니다. 'self-> uuid = uuidRef;'행은 아마도'self-> uuidRef = uuidRef; '여야합니다. 인터페이스의 선언이 정확하다고 가정하면 ('uuid' 멤버는 없습니다). 나는 내 대답을 작동해야만하는 것으로 바꿨다. – dasblinkenlight