Xcode系统库中存在数千个内存泄漏

Xcode系统库中存在数千个内存泄漏,xcode,memory-leaks,instruments,Xcode,Memory Leaks,Instruments,我在我的应用程序上运行了一个检测程序来检查内存泄漏,因为我上次检查已经有几个月了(至少有几个月了),我在我的应用程序中添加了一个新功能并重构了一些代码。当我开始运行时,第一次检查(加载了主视图控制器,它有6个按钮、一个标签和6个自定义UI视图,这些基本上只是带有一些图像的标签),一切看起来都很好,但第二次检查让我大吃一惊,说我有1460个新的漏洞。当我在应用程序中所做的只是按下一个按钮,按下第二个视图控制器(虽然不是一个简单的控制器,但它也没有做任何花哨的事情)时,这看起来真的很高 查看泄漏列表

我在我的应用程序上运行了一个检测程序来检查内存泄漏,因为我上次检查已经有几个月了(至少有几个月了),我在我的应用程序中添加了一个新功能并重构了一些代码。当我开始运行时,第一次检查(加载了主视图控制器,它有6个按钮、一个标签和6个自定义UI视图,这些基本上只是带有一些图像的标签),一切看起来都很好,但第二次检查让我大吃一惊,说我有1460个新的漏洞。当我在应用程序中所做的只是按下一个按钮,按下第二个视图控制器(虽然不是一个简单的控制器,但它也没有做任何花哨的事情)时,这看起来真的很高

查看泄漏列表,只有7个被标记为我的应用程序的故障,其他1453个是以下系统库:

  • 应用支持
  • 篮板发球
  • 踢脚板
  • CFNetwork(如何?我甚至没有做任何网络…)
  • 彩色同步
  • 岩芯图
  • 科雷伊
  • 基础(可能约300处泄漏)
  • 前台服务
  • 图形服务
  • 图像
  • 管理配置
  • 原型工具
  • 石英砂
  • UIF基金会
  • UIKitCore(~700处泄漏,看起来大约有一半)
  • UIKIT服务
  • lib.dylib
  • libnetwork.dylib
  • libsystem_pthread.dylib
  • vimage
我在应用程序中做的越多,出现的系统库就越多,我可以轻松地实现数千次泄漏

查看所有不同的堆栈跟踪,奇怪的是,其中大约一半(从我查看的所有随机跟踪中)具有相同的前四或五个调用,从
lookupimportforward
\u objc\u msgSend\u uncached
函数开始,如下面的屏幕截图所示

当我查看由我的应用程序引起的泄漏时,它们都在堆栈跟踪的顶部有这五个函数,而我的应用程序的函数就在它们的下方。当我双击堆栈跟踪中的函数来查看分配泄漏内存的代码行时,我会看到如下代码行

label = [[UILabel alloc] init];

第一个应该是完全安全的,因为我在那个类中没有做任何奇特的内存方面的事情,而且我不知道第二个怎么可能涉及内存泄漏,因为它不处理任何指针

为了缩小原因,我再次运行并按下了另一个按钮,该按钮将我带到一个视图控制器,该控制器在加载时什么也不做,只包含一个导航栏、6个按钮(4个带有图像)和3个标签-非常简单的基本内容。尽管如此,我还是在按下按钮后发现828处新的泄漏

更进一步,我在Xcode中创建了一个全新的单视图应用程序项目,并复制了第一个视图控制器。我在第一个视图控制器上放置了一个按钮,该按钮具有到第二个视图控制器的显示顺序,并且在第二个视图控制器上放置了一个标签。您可以在找到代码。在instruments中运行此命令,在按下second view控制器后,会导致237次内存泄漏。怎么会

我不记得在过去运行内存泄漏检测时曾见过这么多的泄漏。我肯定我做了一些错误的事情,导致了至少一些泄漏,但事实上,有太多太多的代码没有包含我的任何代码,这让我觉得我要么在一堆不同的地方错误地创建了对象(我不确定我怎么能搞砸
alloc
init
调用),或者一个bug被引入到系统库中并造成了巨大的破坏(我猜可能是位于许多堆栈跟踪顶部的五个常见函数中的某个)

90%的漏洞都在1K以下,因此该应用程序可以在这些漏洞下存活相当长的一段时间,但这仍然让我担心,因为这是一个人们可能会花费数小时的实用程序

我打开了ARC,正在使用Xcode 10.2.1,同时在iOS 12.2的物理iPad Air 2上运行我的应用程序


有什么想法吗?

在测试我的演示应用程序时,我还注意到一些漏洞。与完全不同的系统库关联。 例如,渲染图像的ImageIO代码段

没有什么可泄漏的(只有大约10行代码,是的,我知道CFRelease函数,并且我使用它们,但它没有帮助)

我还注意到,在真实设备上运行的同一个项目并没有检测到泄漏,但在模拟器上运行的同一个项目会检测到泄漏

泄漏甚至存在于singleView项目中,其中所有内容都在情节提要中实现

附加说明
每年苹果都会发布一个新的操作系统和一个新的语言版本,一个新的API。
天哪,这样的比赛是为了什么?结果,他们把时间花在AR/Metal之类的东西上,却忘了开发人员的基本工具,例如第六版的Xcode,它的评级非常低,经常有bug…

在测试我的演示应用程序时,我还注意到了一系列漏洞。与完全不同的系统库关联。 例如,渲染图像的ImageIO代码段

没有什么可泄漏的(只有大约10行代码,是的,我知道CFRelease函数,并且我使用它们,但它没有帮助)

我还注意到,在真实设备上运行的同一个项目并没有检测到泄漏,但在模拟器上运行的同一个项目会检测到泄漏

泄漏甚至存在于singleView项目中,其中所有内容都在情节提要中实现

附加说明
每年苹果都会发布一个新的操作系统和一个新的语言版本,一个新的API。
天哪,这样的比赛是为了什么?结果,他们把时间花在AR/Metal之类的东西上,却忘了开发人员的基本工具,例如Xcode,它的第六个版本的评级非常低,经常有bug…

“我在Xcode中创建了一个全新的单视图应用程序项目”。杰出的你能贴一张缩小版吗
CGPoint point = CGPointMake(bottomBar.frame.origin.x + 70,
                            bottomBar.frame.origin.y);