2016-11-06 23 views
6

Khi tôi đang chạy công cụ và kiểm tra rò rỉ, nó cho thấy chủ yếu bao gồm:Rò rỉ trong Swift 3 rò rỉ/iOS 10

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

này là khi tôi đang sử dụng Swift 3 và thử nghiệm trên các thiết bị sử dụng iOS 10.

Sự rò rỉ chỉ hiển thị trong iOS 10 trong khi trên iOS 9.x mọi thứ có vẻ là bình thường. Trên hết, trong iOS 10 UISwitch dường như cũng không giải quyết được.

Hiện tại tôi đã tạo tất cả các loại cách giải quyết cố gắng tránh sử dụng từ điển và trong một số trường hợp mảng, làm cho nó thực sự gây phiền nhiễu đối với mã.

Câu hỏi:

Tôi có nên được quan tâm về vấn đề này và cố gắng sửa chữa tất cả những rò rỉ hoặc chờ đợi và hy vọng nó sẽ được cố định trong bản cập nhật trong tương lai? Nếu vậy, có bất cứ nơi nào để kiểm tra về những lỗi được biết đến vv?

Trả lời

4

Tôi đã gặp vấn đề tương tự và đã dành rất nhiều thời gian đào. Tôi thấy rằng nếu bạn tạo một đối tượng Swift từ mã Objective-C và đối tượng Swift có một thuộc tính từ điển Swift gốc, bạn sẽ thấy sự rò rỉ này. Nó sẽ không xảy ra nếu tất cả các mã là Swift, và hữu ích hơn, nó sẽ không bị rò rỉ nếu bạn thay đổi từ điển Swift bản địa thành một NSDictionary. Điều này cũng áp dụng cho Swift Set và NSSet. Tôi cũng thấy rằng sự rò rỉ xảy ra trên iOS 10 và không phải trên 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() 
} 

Các Rò rỉ Instrument báo cáo bị rò rỉ:
_NativeDictionaryStorageImpl <String,String>
_NativeDictionaryStorageOwner <String,String>

+0

Bạn có thể cho một ví dụ đơn giản tái sản xuất có thể báo cáo cho Apple? – matt

+0

@matt Tôi đã thêm mã mẫu để tái tạo sự cố. Làm việc trên một Radar cho Apple. – bdmontz

+0

Mã rất độc đáo. Tôi không gặp khó khăn khi triển khai và chạy nó. Tuy nhiên, tôi không thấy đây là một _leak_. Ví dụ, công cụ Memory Graph không báo cáo bất kỳ vấn đề nào. – matt