泄漏 Swift 3 / iOS 10

Leaks in Swift 3 / iOS 10

当我 运行 仪器检查泄漏时,它显示泄漏主要包括:

_ContiguousArrayStorage<String>
_NativeDictionaryStorageOwner<Int, CGFloat>
_NativeDictionaryStorageOwner<String, AnyObject>

这是我使用 Swift 3 并在使用 iOS 10 的设备上进行测试的时候。

泄漏仅出现在 iOS 10 上,而在 iOS 9.x 上一切似乎都很正常。最重要的是,在 iOS 10 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()
}

The Leaks Instrument 报告泄漏:
_NativeDictionaryStorageImpl<String,String>
_NativeDictionaryStorageOwner<String,String>