【问题标题】:Objective-C memory management: do I have to release?Objective-C 内存管理:我必须释放吗?
【发布时间】:2010-04-02 21:27:09
【问题描述】:

我有一个运行这个的方法:

Track* track = [[Track alloc] init:[obj objectForKey:@"PersistentID"] :[obj objectForKey:@"Name"] :[obj objectForKey:@"Artist"] :(NSInteger*)[obj objectForKey:@"Total Time"] :(NSInteger*)[obj objectForKey:@"Play Count"]];
[self setCurrentTrack:(Track*) track];
[track release];

我必须发布曲目吗?

【问题讨论】:

  • 在 Objective-C -init::::: 中命名一个方法被认为是非常糟糕的做法。您可能想去开发中心阅读 Apple 命名约定。此外,您不能将 NSInteger 存储在 NSDictionary 中:只能存储 NSNumber,它是一个包装类。强制转换只是让你的程序崩溃的可靠方法。

标签: objective-c memory-management


【解决方案1】:

是的。您有责任在您拥有该对象时释放该对象。每当您向它发送分配、新建、复制或保留消息时,您就拥有一个对象。您的 currentTrack 属性应该保留轨道。

【讨论】:

    【解决方案2】:

    好吧,您不必这样做,但如果您不再需要使用它,那么您应该这样做。也没有必要有 ":(Track*) track];"我个人更喜欢

    [self setCurrentTrack:track];
    

    因为这是一种更常见的做法。

    【讨论】:

    • 为什么有类型转换是一个错误?这不是必需的,但也不是错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2013-03-25
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多