objective-c - 将 NSObject 添加到 MainMenu.xib 中是否会创建单例对象?

标签 objective-c macos cocoa cocoa-design-patterns

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

然后我可以将 IBOutlet 拖到 AppDelegate 来访问这个单例对象。这看起来是一个快速的方法。这是一个好的做法还是值得劝阻?

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

最佳答案

不,它不是单例,因为没有什么可以阻止您在代码中创建同一类的另一个实例。

这只是创建单个实例的便捷方法。

and objects inside MainMenu.xib are in memory for the life of the app

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

关于objective-c - 将 NSObject 添加到 MainMenu.xib 中是否会创建单例对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588359/

相关文章:

iphone - 未找到 i386 架构的符号?

ios - View 在 iphone 4 上看起来不错,但在 iphone 5 上被推低了

python - 没有名为 contextlib 的模块?在虚拟环境中?

objective-c - 全局替换 NSPasteboard.generalPasteboard()

objective-c - "Source List"中仅某些项目的上下文菜单

objective-c - 使用 stringWithUTF8String 和 dataUsingEncoding 将 NSString 转换为 NSData 返回 nil

objective-c - Cocos2d v2 + 花栗鼠 : Fails when adding shapes to a CCLayer

ios - 北欧国家没有 CoreData 获取结果

macos - NSWindow 的 orderOut/Back/Front 的 sender 参数的目的是什么?

objective-c - 有没有办法在 Cocoa 中更改用户桌面目录路径值?