泄漏 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
>
当我 运行 仪器检查泄漏时,它显示泄漏主要包括:
_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
>