代码之家  ›  专栏  ›  技术社区  ›  Jesse Bunch

我应该释放这个吗?目标C中的记忆管理

  •  0
  • Jesse Bunch  · 技术社区  · 15 年前

    我应该释放strphone吗?将CoreFoundation对象强制转换为NSstring怎么样?怎么了?

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

    谢谢你帮助我理解。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Peter    15 年前

    你应该释放或自动释放两者。对于nsstring,无论何时使用alloc+init创建对象,都会将其引用计数设置为1。您负责在完成时释放它,或者现在自动释放它,以便在运行循环结束时释放它。

    对于cfObject,abmultivalueCopyArrayFallValues返回一个cfArray,它是_156;toll free bridged_157;to nsarray(意味着它可以与nsarray互换使用)。任何时候复制完成——正如方法名称所暗示的那样,您负责释放返回的对象。同样,您可以在完成之后立即释放它,或者现在自动释放它,以便在运行循环完成时释放它。

        2
  •  2
  •   Chuck    15 年前

    是的,都是。见 Apple's memory management guide 对于Cocoa中内存管理的一个完整但仍然相当简短的概要介绍。

        3
  •  1
  •   Dan Ray    15 年前

    记住要麻醉你的记忆管理。

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