为啥“[[UIDevice currentDevice] identifierForVendor]”会导致内存泄漏?

Posted

技术标签:

【中文标题】为啥“[[UIDevice currentDevice] identifierForVendor]”会导致内存泄漏?【英文标题】:why does "[[UIDevice currentDevice] identifierForVendor]"cause memory leak?为什么“[[UIDevice currentDevice] identifierForVendor]”会导致内存泄漏? 【发布时间】:2015-06-17 01:54:34 【问题描述】:

我正在使用 x-code 6.3 工具来分析我的应用程序,但我不明白为什么这条线会导致内存泄漏:

+ (NSString*)IDFV

    NSUUID* device_id = [[UIDevice currentDevice] identifierForVendor];// !100%
    return [device_id UUIDString];

我想发布一张图片,但没有足够的声誉。

我选择了instruments-leaks-call tr​​ee,然后选择'invert call tr​​ee'和'hide system libraries',然后我得到了上面显示的泄漏代码之一,有人可以帮忙,谢谢。

【问题讨论】:

【参考方案1】:

它并没有泄漏内存这样

UIDevice currentDevice 返回一个单例 - 也就是说,对 currentDevice 的每个后续调用都将返回对同一对象实例的引用。

此单例实例在第一次调用 currentDevice 时分配,并且此对象将保持分配状态,直到您的应用退出。

这显示为“泄漏”(从技术上讲是泄漏,因为对象永远无法释放)但这是设计使然,无需担心。

【讨论】:

以上是关于为啥“[[UIDevice currentDevice] identifierForVendor]”会导致内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?