2016-11-06 68 views
6

當我運行儀器和檢查泄漏,這是示出了泄漏主要由以下組成:泄漏在夫特3/10的iOS

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

這是當我使用夫特3和測試使用iOS裝置10.

泄漏只在iOS 10中顯示,而在iOS 9.x中一切似乎都正常。最重要的是,在iOS 10 UISwitch似乎並沒有解除分配。

目前我一直在創建各種解決方法,以避免使用字典和在某些情況下數組,使它真的很煩人的代碼。

問:

我應該關心這一點,並嘗試解決所有這些泄漏或等待,並希望這將是固定在未來的更新?如果是這樣,是否有任何地方可以檢查哪些bug已知等等?

回答

4

我有同樣的問題,並花了很多時間挖掘。我發現如果你從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>

+0

你能舉一個簡單重複的例子,這可能會報告給蘋果? – matt

+0

@matt我添加了重現問題的示例代碼。爲Apple工作雷達。 – bdmontz

+0

寫得很好的代碼。我沒有執行和運行它的麻煩。但是,我不知道這是怎麼一個_leak_。例如,Memory Graph工具不報告任何問題。 – matt