Xcode 4.2和iOS 5中的内存泄漏

vud*_*duu 1 memory-leaks objective-c xcode4.2

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


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

NSNumber *xy = [[NSNumber alloc] init];
Run Code Online (Sandbox Code Playgroud)

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

char *oldString = "Old String";
char newStrig = strdup(oldString);
Run Code Online (Sandbox Code Playgroud)

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

Abi*_*ern 5

ARC仅适用于Cocoa内存管理.如果你在Cocoa和CoreFoundation之间为免费桥接对象进行投射,那么就有用于传输内存管理的宏.

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

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

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

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