Xcode 4.2和iOS 5中的内存泄漏

时间:2011-11-27 03:03:39

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

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


这不是内存泄漏,因为ARC发送'release'消息:

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

但是可以用这个来创建内存泄漏:

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

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

2 个答案:

答案 0 :(得分:5)

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

你可以在C中泄漏内存,你可以泄漏Core Foundation内存,而静态分析器可以帮助你找到它们。

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

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

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

答案 1 :(得分:3)

ARC只有在使用Objective-C内存分配时才能工作,因为它只与它绑定。实际上,当您使用ARC时,编译器会尽力将每个alloc与一个版本匹配(它甚至无法保证)。

如果您使用除Objective-C分配之外的任何其他方式,您将再次独立。 ARC不会处理这个问题。