我应该发布这个吗? Objective-C中的内存管理

时间:2010-09-03 16:28:17

标签: iphone objective-c memory-management core-foundation

我应该发布strPhone吗?如何将coreFoundation对象强制转换为NSString?会发生什么事?

strPhone = [[NSString alloc] initWithUTF8String: [[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String]];

感谢您帮助我理解。

3 个答案:

答案 0 :(得分:3)

您应该释放或自动释放两者。对于NSString,每次使用alloc + init创建对象时,您都将其引用设置为1.您负责在完成时释放它或立即自动释放它以允许在运行循环结束时释放它。

对于CFObject,ABMultiValueCopyArrayOfAllValues返回一个CFArray,它是NSArray的“免费桥接”(意味着它可以与NSArray互换使用)。任何时候复制完成 - 如方法名称所暗示的那样,您负责释放返回的对象。同样,您可以在完成后立即释放它,或者现在自动释放它以在运行循环完成时释放它。

答案 1 :(得分:2)

是的,两者都有。请参阅Apple's memory management guide,了解Cocoa内存管理的完整但仍然非常简短的概述。

答案 2 :(得分:1)

请记住NARC的内存管理。

新,分配,保留,复制。这些是创建您负责释放的对象的方法。除了这四种方法之外,您获得的任何新对象都是自动释放的,您不必显式处理其释放。