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/