Hen*_*Lee 6 memory-leaks instruments swift swift3 ios10
当我运行仪器并检查泄漏时,它显示的泄漏主要包括:
_ContiguousArrayStorage<String>
_NativeDictionaryStorageOwner<Int, CGFloat>
_NativeDictionaryStorageOwner<String, AnyObject>
Run Code Online (Sandbox Code Playgroud)
这是我使用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()
}
Run Code Online (Sandbox Code Playgroud)
Leaks Instrument 报告泄漏:
_NativeDictionaryStorageImpl <String,String>
_NativeDictionaryStorageOwner <String,String>
| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |