当我运行仪器并检查是否泄漏时,显示的泄漏主要包括:
_ContiguousArrayStorage<String> _NativeDictionaryStorageOwner<Int, CGFloat> _NativeDictionaryStorageOwner<String, AnyObject>
这是当我使用Swift 3并在使用iOS 10的设备上进行测试时。
泄漏仅在iOS 10中显示,而在iOS 9.x上,一切似乎都很正常。最重要的是,iOS 10 UISwitch中似乎也没有取消分配。
UISwitch
当前,我一直在创建各种变通办法,以试图避免使用字典,在某些情况下还避免使用数组,这使得编写代码确实很烦人。
题:
我应该担心这个问题并尝试修复所有这些漏洞,还是等待并希望在以后的更新中将其修复?如果是这样,是否有地方可以检查已知的错误等?
我遇到了同样的问题,花了很多时间进行挖掘。我发现,如果您从Objective- C代码创建Swift对象,并且Swift对象具有本机Swift字典属性,则会看到此泄漏。如果所有代码都是Swift,则不会发生这种情况,更有用的是,如果将本机Swift字典更改为NSDictionary,也不会泄漏。这也适用于Swift Set和NSSet。我还看到泄漏发生在iOS 10而不是iOS 9上。
// LeakySwiftObject.swift class 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.swift class ViewController: UIViewController { let testObj = ObjectiveCObject() }
泄漏工具报告泄漏: _NativeDictionaryStorageImpl <String,String> _NativeDictionaryStorageOwner <String,String>
<String,String