2011-09-28 122 views
1

让我说我有一个NSObject的AppController:NSObject。使用IB,我将一个NSObject控件拖到MainMenu.xib中,并将该类指向AppController。由于MainMenu.xib只加载一次,并且MainMenu.xib中的对象在应用程序的整个生命周期中都处于内存中,它是否使AppController对象成为单例?在MainMenu.xib中添加一个NSObject是否会创建一个单例对象?

然后我可以拖动一个IBOutlet到AppDelegate来访问这个单例对象。这看起来很快捷。这是一种好的做法还是令人灰心?

我认为标准方法是在类中添加一个静态AppController * sharedInstance并使用+(AppController *)sharedAppController进行访问。

回答

1

不,它不是单身人士,因为没有任何东西阻止你在代码中创建同一类的另一个实例。

这只是创建单个实例的简便方法。里面MainMenu.xib

和对象是在内存中的应用

这是不正确的生活。如果没有人保留这些对象(或者在GC下对它们持有强烈的引用),则它们将被释放。这是事实。请参阅下面的Peter Hosey的评论。

+0

感谢您澄清我的误解。 – jemeshsu

+0

“这是不正确的。如果没有人保留这些对象(或者在GC下有强烈的引用),他们将被释放。“在Mac上,这是不正确的。如果没有人释放这些对象(当不在GC下)时,它们将被释放。 AppKit代表文件所有者保留顶级对象:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i -CH4-SW6 MainMenu的文件所有者是NSApplication对象。在iOS上,你是对的;所有对象都必须保留一些东西才能保持活力。 –

+0

感谢纠正,彼得。我纠正了我的答案。 –

相关问题