iOS:保留共享实例

时间:2011-05-31 03:38:59

标签: objective-c ios retain

我在函数中使用单例类的共享实例,我是否需要在对象上执行retain?我见过的一些例子就是这样做的:AVAudioSession *session = [[ AVAudioSession sharedInstance] retain];而一些只是这样做:AVAudioSession *session = [ AVAudioSession sharedInstance];。我确信某个地方有一条规则可以告诉我该怎么做,但我只是不知道。

3 个答案:

答案 0 :(得分:7)

简单地将其视为任何其他物体。有时,单例类将覆盖内存管理方法以确保它不会被释放,但是无法知道共享对象是否具有此权限。对于没有共享对象和单例,如果第一个被取消分配,则将根据需要创建新对象。因此,如果需要确保指针在将来的方法中有效,请在获取时保留共享对象。如果您不需要保留它,则不需要执行任何操作,因为sharedInstance方法将自动释放它。

答案 1 :(得分:5)

你是对的,有rules that tell you what to do。它们与您在Cocoa Touch中的其他地方使用的规则相同。单身人士的客户不应该关心他们使用的对象是单身人士,他们绝对不应该依赖单身人士的单身来避免通常的记忆管理惯例。

是的,如果您知道某个对象是一个单例并且您知道它将不会被解除分配,那么保留它可能看起来多余。另一方面,当你获得它时保留单身并在你做得更好时释放它会记录程序员的意图并避免向任何人(包括未来你)解释为什么不保留这个特定对象。最重要的是,它会阻止您的代码依赖于代码其他部分的实现细节。

答案 2 :(得分:1)

您不需要保留 sharedInstances ,因为它是作为 singleton 类实现的。