我使用xcode 4.2,这使用ARC(自动引用计数)。
这不是内存泄漏,因为ARC发送'release'消息:
NSNumber *xy = [[NSNumber alloc] init];
但是可以用这个来创建内存泄漏:
char *oldString = "Old String";
char newStrig = strdup(oldString);
我想知道可以制作其他类型的内存泄漏吗? (如果可以不使用C或C ++)
答案 0 :(得分:5)
ARC仅适用于Cocoa内存管理。如果您在Cocoa和CoreFoundation之间为免费桥接对象进行投射,则可以使用宏来传输内存管理。
你可以在C中泄漏内存,你可以泄漏Core Foundation内存,而静态分析器可以帮助你找到它们。
ARC并没有完全取消内存管理。它消除了为Cocoa对象管理内存的需要,并且在某些情况下(因为它可以优化掉一些retain
release
调用)在管理内存方面更有效,但是您仍然需要了解Core的内存管理基础对象和C内存。
您还需要了解Cocoa内存管理,以了解何时使用strong
,weak
或copy
属性,以及何时使用Block_copy()
和{{1}在块上,即使块是Cocoa对象,在大多数情况下,使用ARC处理正确的内存管理。
再次; ARC不会取消内存管理。它简化了它,并减少了你必须编写的代码量,但是你仍然需要了解在幕后为你做的事情,以及当你需要管理自己的内存时。
答案 1 :(得分:3)
ARC只有在使用Objective-C内存分配时才能工作,因为它只与它绑定。实际上,当您使用ARC时,编译器会尽力将每个alloc与一个版本匹配(它甚至无法保证)。
如果您使用除Objective-C分配之外的任何其他方式,您将再次独立。 ARC不会处理这个问题。