我应该在声音中释放NSBundle吗?

Uma*_*uas 0 memory-management objective-c ios

我应该NSBundle在下面的代码中发布吗?NSURL还应该发布还是不发布?我很迷惑.

NSBundle  *mainBundle = [NSBundle mainBundle];
NSError   *error;
NSURL     *audioURL = [NSURL fileURLWithPath:[mainBundle pathForResource:@"count_in" ofType: @"mp3"]];
AVAudioPlayer *player1 = [(AVAudioPlayer*) [AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];
self.player =   player1;
[self.player play];
[player1 release];
Run Code Online (Sandbox Code Playgroud)

Jha*_*iya 5

您不应该发布NSBundle 和NSURL实例,因为您尚未分配这些.

来自apple文档.

如果使用名称以"alloc","new","copy"或"mutableCopy"(例如,alloc,newObject或mutableCopy)开头的方法创建对象,或者如果发送它,则获取对象的所有权保留消息.

您使用release或autorelease放弃对象的所有权.autorelease只是意味着"将来发送一条释放消息"(具体来说:当使用的自动释放池收到一条排放消息时 - 要了解这将是什么时候,请参阅"自动释放池").

我强烈建议你清除你的记忆管理概念.

阅读关于内存管理规则的苹果文章