2016-11-06 7 views
6

私は楽器を実行し、漏れをチェックしています、主にから成るリークを示しています:リーク

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

私はスウィフト3を使用したとiOSを使用してデバイス上でテストしていたときにこれがあります10.

リークはiOS 10でのみ表示され、iOS 9.xではすべて正常であるようです。さらに、iOS 10ではUISwitchはどちらも割り当てを解除していないようです。

現在、私はあらゆる種類の回避策を作成していますが、辞書の使用を避けようとしたり、場合によっては配列を使用したりして、コードに迷惑をかけてしまいます。

質問:

が、私はこのことについて心配すると、すべてのこれらのリークを修正するか、待つことを試してみて、それが将来のアップデートで修正されることを願っていますでしょうか?もしそうなら、どのバグが知られているかなどを確認する場所はどこですか?

答えて

4

私は同じ問題を抱え、多くの時間を掘り下げました。私はObjective-CコードからSwiftオブジェクトを作成し、SwiftオブジェクトにSwiftのネイティブ辞書プロパティがある場合、このリークが表示されることがわかりました。ネイティブのスウィフト辞書をNSDictionaryに変更すると、すべてのコードがSwiftで、より便利には漏れません。これは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問題を再現するサンプルコードを追加しました。アップルのレーダーでの作業。 – bdmontz

+0

非常にうまく書かれたコード。私はそれを実装して実行するのに苦労しなかった。しかし、私はこれが_leak_である方法を見ていない。たとえば、メモリグラフツールは問題を報告していません。 – matt