我遇到了同样的问题,花了很多时间进行挖掘。我发现,如果您从Objective-
C代码创建Swift对象,并且Swift对象具有本机Swift字典属性,则会看到此泄漏。如果所有代码都是Swift,则不会发生这种情况,更有用的是,如果将本机Swift字典更改为NSDictionary,也不会泄漏。这也适用于Swift
Set和NSSet。我还看到泄漏发生在iOS 10而不是iOS 9上。
// LeakySwiftObject.swiftclass LeakySwiftObject: NSObject { let dict = [String: String]() // <- Any native Swift dictionary will reproduce the leak}// ObjectiveCObject.h@class LeakySwiftObject;@interface ObjectiveCObject : NSObject@property (strong) LeakySwiftObject *leaky;@end// ObjectiveCObject.m@implementation ObjectiveCObject- (instancetype)init{ self = [super init]; if (self) { self.leaky = [LeakySwiftObject new]; } return self;}@end// ViewController.swiftclass ViewController: UIViewController { let testObj = ObjectiveCObject()}泄漏工具报告泄漏:
_NativeDictionaryStorageImpl
<String,String>
_NativeDictionaryStorageOwner
<String,String>



