首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 3/ iOS 10的泄漏

Swift 3/ iOS 10的泄漏
EN

Stack Overflow用户
提问于 2016-11-06 12:26:17
回答 1查看 1.4K关注 0票数 6

当我运行仪器并检查泄漏时,它显示的泄漏主要包括:

代码语言:javascript
运行
复制
_ContiguousArrayStorage<String>
_NativeDictionaryStorageOwner<Int, CGFloat>
_NativeDictionaryStorageOwner<String, AnyObject>

这是我使用Swift 3并在使用iOS 10的设备上进行测试的时候。

泄漏只出现在iOS 10中,而在iOS 9.x上似乎一切正常。最重要的是,在iOS 10中,UISwitch似乎也没有转手。

目前,我一直在创建各种各样的解决方案,试图避免使用字典,在某些情况下避免使用数组,这使代码变得非常烦人。

问题:

我应该关注这个问题,并尝试修复所有这些漏洞,还是等待并希望它在将来的更新中得到修复?如果是的话,是否有任何地方可以检查哪些bug是已知的等等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 20:00:21

我也有同样的问题,花了很多时间去挖掘。我发现,如果您从object代码创建Swift对象,而Swift对象具有一个本机Swift字典属性,您将看到这个漏洞。如果所有代码都是Swift,则不会发生这种情况,更有用的是,如果将本机Swift字典更改为NSDictionary,则不会泄漏。这也适用于Swift和NSSet,我还发现泄漏发生在iOS 10而不是iOS 9上。

代码语言:javascript
运行
复制
// 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>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40449316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档