构建Cocoa应用程序时,可以在AppDelegate
类中添加所有全局方法和对象,并且在代码的任何位置,您都可以通过
AppDelegate
AppDelegate* appDlgt = (AppDelegate*)[[NSApplication sharedApplication] delegate];
但是我怎么能在Cocoa框架中做同样的事情呢?它似乎没有AppDelegete
由于
答案 0 :(得分:2)
喜欢这个
+ (instancetype)sharedMyClass
{
static id kSharedMyClass = nil;
static dispatch_once_t theOnceToken;
dispatch_once( &theOnceToken, ^{ kSharedMyClass = [[self alloc] init]; } );
return kSharedMyClass;
}
答案 1 :(得分:1)
NSApp是NSApplication实例的快捷方式,NSApplication实例通常具有委托,或者更为古老的子类,您可以在其中存储数据。
所以如果您遵循默认项目模板:
((YourAppDelegate *)[NSApp delegate]).property
会让你到达你想去的地方
不要滥用它,因为你应该只在委托中存储属于应用程序的东西,即便如此,那些用户定义的属性应该是NSUserDefaults或包含在其他控制器类中。
编辑:对不起,我有点错过了这一点...... 如果您需要将更高级别的应用程序数据传递到框架中,那么您可以做很多事情,不知道哪些细节很难评论哪个最好......一些选项:
在框架中使用您感兴趣的属性定义协议,在您的代理中采用该协议。
然后((id <FrameworkProtocol>)NSApp.delegate).protoProperty
就可以了。
但是这引入了委托采用该协议的要求,您可以使用conformsToProtocol:方法检查该协议。