当前位置: 首页 > 面试题库 >

Swift 3 / iOS 10泄漏

孟昆
2023-03-14
问题内容

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

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

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

泄漏仅在iOS 10中显示,而在iOS 9.x上,一切似乎都很正常。最重要的是,iOS 10 UISwitch中似乎也没有取消分配。

当前,我一直在创建各种变通办法,以试图避免使用字典,在某些情况下还避免使用数组,这使得编写代码确实很烦人。

题:

我应该担心这个问题并尝试修复所有这些漏洞,还是等待并希望在以后的更新中将其修复?如果是这样,是否有地方可以检查已知的错误等?


问题答案:

我遇到了同样的问题,花了很多时间进行挖掘。我发现,如果您从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>



 类似资料:
  • 下面是我的代码,用于将文件夹从bundle复制到库。 我得到这个错误: **但我检查了它在库文件夹中不存在*

  • 我想订阅一个主题后成功连接,但我不能这样做。我已经试过了EG.starscream(仅适用于WebSocket连接)、StompClient、ActionCableClient、FayeSwift等的所有库,但似乎都不起作用。我想连接并订阅Stomp客户端WebSocket,请给我推荐一些可以连接并订阅Stomp客户端的WebSocket库。

  • 问题内容: 因此,显然已在iOS 10中弃用了。有人能解释为什么或可以解释下一步做什么吗?我已经查看了Apple网站,发现了一些与OpenURL有关的东西,这就是他们所说的现在使用的东西: 有没有人有证据表明这是在Swift 3.0中使用OpenURL的新方法?另外,分别在和参数中使用什么值? 问题答案: 迅捷3+ : 用法: 资源

  • 本文向大家介绍iOS10适配(必看),包括了iOS10适配(必看)的使用技巧和注意事项,需要的朋友参考一下 一.工程改动 1. 工程配置 直接使用Xcode8Beta打开工程后,你会发现你的provisonfile配置出了问题,这是由于在Xcode8中对工程配置有了一些小的改动。 在Xcode8工程配置的general选项卡中,使用更详细signing选项替换了原有的team选项。 选中:proj

  • 为什么这在《雨燕3》中行不通?它会在运行时崩溃,并表示: “-[MY_APP_NAME.DisplayOtherappSCTRL TAP:]:无法识别的选择器已发送到实例0x17ECEB70”

  • 问题内容: 已在Swift3中弃用。任何人都可以提供一些示例来说明尝试打开URL时替换的工作方式吗? 问题答案: 所有你需要的是:

  • 我试图获取一个JSON响应,并将结果存储在一个变量中。我在以前的Swift版本中使用过这个代码版本,直到Xcode8的GM版本发布。我在StackOverflow上看了几篇类似的文章:Swift 2 Parsing JSON-Cant下标类型为“anyObject”的值和Swift 3中的JSON Parsing。 然而,这里所传达的思想似乎不适用于这种情况。 如何正确解析Swift3中的JSON

  • 我得到以下错误 响应数据为空。我做错了什么,或者我在代码中遗漏了什么?