【问题标题】:Memory leaks in Xcode 4.2 and iOS 5Xcode 4.2 和 iOS 5 中的内存泄漏
【发布时间】:2012-01-07 04:09:51
【问题描述】:

我使用 xcode 4.2,这个使用 ARC(自动引用计数)。


这不是内存泄漏,因为 ARC 发送“释放”消息:

NSNumber *xy = [[NSNumber alloc] init];

但有可能会造成内存泄漏:

char *oldString = "Old String";
char newStrig = strdup(oldString);

我想知道其他类型的内存泄漏可以吗? (如果可以不使用 C 或 C++)

【问题讨论】:

    标签: objective-c memory-leaks xcode4.2


    【解决方案1】:

    ARC 仅适用于 Cocoa 内存管理。如果您在 Cocoa 和 CoreFoundation 之间进行转换以获得免费桥对象,则可以使用宏来传输内存管理。

    您可以在 C 中泄漏内存,您可以泄漏 Core Foundation 内存,而静态分析器可以帮助找到这些。

    ARC 并没有完全取消内存管理。它消除了为 Cocoa 对象管理内存的需要,并且在某些情况下(因为它可以优化掉一些 retainrelease 调用)在管理内存方面更有效,但您仍然需要了解 Core Foundation 对象的内存管理,并且用于 C 内存。

    您还需要了解 Cocoa 内存管理以了解何时使用 strongweakcopy 属性,以及何时在块上使用 Block_copy()Block_release(),即使块是 Cocoa 对象在大多数情况下,ARC 会为您处理正确的内存管理。

    再次; ARC 不会取消内存管理。它简化了它,并减少了您必须编写的代码量,但您仍然需要了解幕后为您做了什么,以及何时需要管理自己的内存。

    【讨论】:

      【解决方案2】:

      ARC 只能在您使用 Objective-C 内存分配的情况下工作,因为它专门与此相关联。事实上,当您使用 ARC 时,编译器会尽最大努力将每个分配与一个版本匹配(它甚至不能保证这一点)。

      如果您使用除 Objective-C 分配之外的任何其他方式,那么您又要靠自己了。 ARC 无法处理。

      【讨论】:

        猜你喜欢
        • 2012-03-04
        • 2014-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多