我应该发布strPhone吗?那么coreFoundation对象被转换为NSString呢?它会发生什么?我应该释放这个吗? Objective-C中的内存管理
strPhone = [[NSString alloc] initWithUTF8String: [[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String]];
谢谢你帮助我理解。
我应该发布strPhone吗?那么coreFoundation对象被转换为NSString呢?它会发生什么?我应该释放这个吗? Objective-C中的内存管理
strPhone = [[NSString alloc] initWithUTF8String: [[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String]];
谢谢你帮助我理解。
你应该释放或autorelease两者。对于NSString,任何时候使用alloc + init创建一个对象的时候,你都将它的引用计数设置为1.你负责在完成时释放它或者立即自动释放它,以允许它在运行循环结束时释放。
对于CFObject,ABMultiValueCopyArrayOfAllValues返回一个CFArray,它是NSArray的“免费桥接”(意味着它可以与NSArray交替使用)。任何时候拷贝完成 - 就像方法名所暗示的那样,你有责任释放返回的对象。同样,您可以在完成之后立即释放它,或者立即自动释放它,以便在运行循环完成时释放它。
是的,两者。请参阅Apple's memory management guide了解可可中内存管理的完整但仍相当简短的概要。
记住你的内存管理的NARC。
新建,分配,保留,复制。这些是创建您负责释放的对象的方法。除了这四种方法之外,你得到的任何新对象都是自动释放的,你不必显式处理它的释放。
不要担心引用次数。如果通过显式分配('alloc' /'Create')或通过复制另一个对象来创建对象,则您拥有它。无论你拥有什么,你都必须释放。内存管理编程指南最近被重写了这些行:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt在这种情况下,CF版本也是相关的:http://开发人员。 apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/ – 2010-09-03 16:56:38