2010-04-02 45 views
-1

我有运行此的方法:Objective-C的存储器管理

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

[自setCurrentTrack:(音轨*)轨道]; [曲目发布];

我必须发布曲目吗?

+4

在Objective-C'-init :::::'中命名方法被认为是非常糟糕的做法。您可能想要阅读开发中心的Apple命名约定。另外,你不能在NSDictionary中存储一个NSInteger:只有一个NSNumber,它是一个包装类。投射只是一个可以让程序崩溃的方法。 – 2010-04-02 21:29:44

回答

2

是的。您有责任在您拥有该物品时释放对象。无论何时你发送一个分配,新的,复制或保留的消息,你都拥有一个对象。您的currentTrack属性应该保留该曲目。

0

好吧,你不需要,但如果你不必再使用它,那么你应该。也没有必要拥有“:(Track *)曲目”;“我个人比较喜欢

[self setCurrentTrack:track]; 

因为这是比较常见的做法。

+1

为什么有一个错误的类型转换?这不是必需的,但也不是错误。 – 2010-04-02 21:34:03

+0

以及我上面展示的东西比较常见 – 2010-04-02 22:26:57