Xcode Analyzer сообщает об утечке с ARC - совет как решить? - PullRequest
2 голосов
/ 26 марта 2012

Я уверен, что статический анализатор, вероятно, прав в этом случае, но я не совсем понимаю, почему ...

Вот фрагмент кода из класса 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 сообщил об утечке в строке 'return' в первом init. Скриншот можно найти здесь .

У меня есть базовые представления о bridge, bridge_retain и bridge_transfer, но я считаю, что в этом случае правильный выбор - мост.

Если мое понимание верно, может кто-нибудь посоветовать, правильно ли я это делаю? Кроме того, как мне решить эту проблему?

С уважением, Ник

1 Ответ

1 голос
/ 26 марта 2012

Вам необходимо добавить dealloc к вашей реализации и вызвать CFRelease для uuidRef там:

- (void)dealloc
{
    CFRelease(uuidRef);
}
...