iOS:保留共享实例

341*_*008 4 objective-c retain ios

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

ugh*_*fhw 7

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


Cal*_*leb 5

你是对的,有规则可以告诉你该怎么做.它们与您在Cocoa Touch中的其他地方使用的规则相同.单身人士的客户不应该关心他们使用的对象是单身人士,他们绝对不应该依赖单身人士的单身来避免通常的记忆管理惯例.

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