Objective-C内存管理:我必须释放吗?

Objective-C内存管理:我必须释放吗?,objective-c,memory-management,Objective C,Memory Management,我有一个方法可以运行以下命令: 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 setCur

我有一个方法可以运行以下命令:

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];

我必须释放曲目吗?

好吧,你不必释放,但如果你不必再使用它,那么你应该释放。而且也没有必要有“:(Track*)Track];“我个人更喜欢

[self setCurrentTrack:track];

因为这是一种更普遍的做法。

是的。您有责任在拥有对象的任何时候释放该对象。无论何时向对象发送alloc、new、copy或retain消息,您都拥有该对象。您的currentTrack属性应该保留该轨迹。

在Objective-C
-init:。您可能想在开发中心阅读苹果的命名约定。此外,您不能在NSDictionary中存储NSInteger:只能存储NSNumber,这是一个包装类。强制转换只是一种肯定会使程序崩溃的方法。为什么强制转换是一个bug?这不是必须的,但也不是错误。