Objective c Xcode 4.2和iOS 5中的内存泄漏
我使用xcode 4.2,这使用ARC(自动参考计数)Objective c Xcode 4.2和iOS 5中的内存泄漏,objective-c,memory-leaks,xcode4.2,Objective C,Memory Leaks,Xcode4.2,我使用xcode 4.2,这使用ARC(自动参考计数) 这不是内存泄漏,因为ARC发送“释放”消息: NSNumber *xy = [[NSNumber alloc] init]; 但有可能通过以下方式造成内存泄漏: char *oldString = "Old String"; char newStrig = strdup(oldString); 我想知道还有其他类型的内存泄漏吗? (如果可以不使用C或C++)ARC只能在您使用Objective-C内存分配时工作,因为它专门与此相关。事
这不是内存泄漏,因为ARC发送“释放”消息:
NSNumber *xy = [[NSNumber alloc] init];
但有可能通过以下方式造成内存泄漏:
char *oldString = "Old String";
char newStrig = strdup(oldString);
我想知道还有其他类型的内存泄漏吗?
(如果可以不使用C或C++)ARC只能在您使用Objective-C内存分配时工作,因为它专门与此相关。事实上,当您使用ARC时,编译器会尽最大努力将每个alloc与一个发行版相匹配(它甚至不能保证这一点)
如果您使用的是Objective-C分配以外的任何其他方法,那么您又可以自己操作了。ARC不会处理这个问题。ARC只能在您使用Objective-C内存分配时工作,因为它只与Objective-C内存分配相关。事实上,当您使用ARC时,编译器会尽最大努力将每个alloc与一个发行版相匹配(它甚至不能保证这一点)
如果您使用的是Objective-C分配以外的任何其他方法,那么您又可以自己操作了。ARC无法处理此问题。ARC仅适用于Cocoa内存管理。如果您正在Cocoa和CoreFoundation之间为toll free bridge对象进行强制转换,则有宏用于传输内存管理 <>你可以在C中泄漏内存,你可以泄漏核心基础内存,静态分析器有助于找到那些。 ARC并没有完全取消内存管理。它消除了对COCOA对象的内存管理的需要,并且在某些情况下(因为它可以优化一些代码< >保留< /COD> <代码>发布< /COD>调用)在管理内存方面更有效,但您仍然需要了解核心基础对象和C内存的内存管理。 您还需要了解Cocoa内存管理,以了解何时使用
strong
、weak
或copy
属性,以及何时在块上使用Block\u copy()
和Block\u release()
,即使块是Cocoa对象,并且在大多数情况下,使用ARC可以为您处理正确的内存管理
再次ARC不会取消内存管理。它简化了它,并减少了您必须编写的代码量,但您仍然需要了解在幕后为您做了什么,以及何时需要管理自己的内存。ARC仅适用于Cocoa内存管理。如果您正在Cocoa和CoreFoundation之间为toll free bridge对象进行强制转换,则有宏用于传输内存管理 <>你可以在C中泄漏内存,你可以泄漏核心基础内存,静态分析器有助于找到那些。 ARC并没有完全取消内存管理。它消除了对COCOA对象的内存管理的需要,并且在某些情况下(因为它可以优化一些代码< >保留< /COD> <代码>发布< /COD>调用)在管理内存方面更有效,但您仍然需要了解核心基础对象和C内存的内存管理。 您还需要了解Cocoa内存管理,以了解何时使用
strong
、weak
或copy
属性,以及何时在块上使用Block\u copy()
和Block\u release()
,即使块是Cocoa对象,并且在大多数情况下,使用ARC可以为您处理正确的内存管理
再次ARC不会取消内存管理。它简化了它,减少了您必须编写的代码量,但您仍然需要了解在幕后为您做了什么,以及何时需要管理自己的内存