【问题标题】:Memory leak on setFrame:setFrame 上的内存泄漏:
【发布时间】:2017-04-14 10:56:27
【问题描述】:

我在Instruments 中测试了我的project,最后我在UIView 的类别中找到了memory leakUIView+RSAdditions

以下代码:

- (void)setHeight:(CGFloat)height {
    CGRect frame = self.frame;
    frame.size.height = height;
    self.frame = frame;  // this code cause memory leak
}

我也搜索了我的project,在这里发现了一些相同的方法名称:

同样的方法会影响内存泄漏吗?我对memory leak的原因感到困惑。

【问题讨论】:

    标签: ios memory-leaks categories xcode-instruments


    【解决方案1】:

    根据我的经验。该仪器并没有真正告诉您哪条线路导致泄漏。它只是告诉您该行包含在导致泄漏的堆栈跟踪之一中。它只是帮助您更轻松地跟踪泄漏,因为您将了解程序的流程。您必须根据仪器提供的堆栈跟踪在您自己的基础上跟踪它。

    这是仪器的堆栈跟踪示例截图:

    从我之前的调试来看,这些是我在 ARC 下导致内存泄漏的错误

    • 在子对象中设置对父对象的强引用。这会导致 保留周期。
    • 在接口中设置对委托的强引用。
    • 在之后进行免费桥接时忘记释放对象 转让所有权。
    • 忘记为您设置的对象设置弱引用 在一个块中传递。

    希望对你有帮助

    【讨论】:

    • do a toll-free bridging after transferring owenership 是什么意思?
    • @aircraft 例如,您要将 NSArray 转换为 CFArrayRef 并保留它: CFArrayRef arrayRef = (__bridge_retained) anNSArray;现在,因为您保留它。你需要像 CFRelease() 之类的自己释放它
    猜你喜欢
    • 2012-12-23
    • 2017-02-28
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多