当我运行仪器并检查泄漏时,它显示的泄漏主要包括:
_ContiguousArrayStorage<String>
_NativeDictionaryStorageOwner<Int, CGFloat>
_NativeDictionaryStorageOwner<String, AnyObject>
这是我使用Swift 3并在使用iOS 10的设备上进行测试的时候。
泄漏只出现在iOS 10中,而在iOS 9.x上似乎一切正常。最重要的是,在iOS 10中,UISwitch
似乎也没有转手。
目前,我一直在创建各种各样的解决方案,试图避免使用字典,在某些情况下避免使用数组,这使代码变得非常烦人。
问题:
我应该关注这个问题,并尝试修复所有这些漏洞,还是等待并希望它在将来的更新中得到修复?如果是的话,是否有任何地方可以检查哪些bug是已知的等等?
发布于 2017-01-12 12:00:21
我也有同样的问题,花了很多时间去挖掘。我发现,如果您从object代码创建Swift对象,而Swift对象具有一个本机Swift字典属性,您将看到这个漏洞。如果所有代码都是Swift,则不会发生这种情况,更有用的是,如果将本机Swift字典更改为NSDictionary,则不会泄漏。这也适用于Swift和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
>
https://stackoverflow.com/questions/40449316
复制相似问题