ios - 此方法中的泄漏

标签 ios memory-leaks core-foundation

Leak instruments 显示泄漏的 NSCFData 对象的数量,堆栈跟踪显然在我的应用程序方法边界的末尾包含以下方法。

NSData* SAKeychainGetValue(NSString *key)
{
    NSMutableDictionary *searchDictionary = SAGetKeychainSearchDictionary(key);
    [searchDictionary setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
    [searchDictionary setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];

    CFDataRef value = nil;
    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&value);
    if (status != errSecSuccess && status != errSecItemNotFound)
    {
        NSLog(@"failed to get key %@ with error %ld.", key, (long)status);
    }
    return (__bridge NSData*)value;
}

但是我看不出这个方法有什么问题会泄露。

最佳答案

您应该在 (__bridge NSData*)value 中使用 __bridge_transfer 而不是 __bridge

SecItemCopyMatching 方法返回的值(copy 意味着返回值应该在 apple 命名约定中被释放)应该被释放,所以你应该将所有权转移给 ARC。

关于ios - 此方法中的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23150994/

相关文章:

macos - 关于CFLocaleCopyCurrent API返回值不正确

ios - 通过 GMSMapView 拦截 UIView 上的触摸

ios - 如何将 UIDatePicker 中的日期和时间设置为 12 小时格式的 UITextField

iphone - 如何在iPhone应用程序中找到至少具有一个字符的String?

android - 刷新 Activity 时内存泄漏

c - 使用链表结构跟踪 C 程序中可能的内存泄漏

ios:泄漏警告不明确

ios - TestFlight 错误 "Your request couldn' t 完成”?

objective-c - 使用 ARC 绘制渐变时 CFArrayRef 和 NSArray 出现问题

ios - Xcode 错误 - 在 'CFByteOrder' 文件内使用未声明的标识符 'NSByteOrder'