第一:我真的希望我把问题放在正确的位置,所以如果我走错了路,请纠正我......!
我有一个窗口来显示在表格视图中间隔更新的数据。此数据由Controller
对象管理,该对象是tableview的数据源。 WindowController
具有绑定到IB中的Controller
对象的控制器属性:
@implementation WindowController
- (id) initWithWindowNibName:(NSString *)windowNibName {
self = [super initWithWindowNibName:windowNibName];
if (self) {
_controller = [[Controller alloc] init];
}
return self;
}
- (void) windowDidLoad {
...
此外,我有一个WindowHandler
类,它有一个静态引用' WindowController'使用类方法打开和关闭窗口:
static WindowController * windowController = nil;
@implementation WindowHandler
+ (void) initialize {
if (self == [WindowHandler class]) {
if (!windowController) {
windowController = [[WindowController alloc] initWithWindowNibName:kWindowNibKey];
}
}
}
+ (void) showWindow:(id)sender {
[windowController showWindow:sender];
}
...
因为我想在第一次打开窗口之前监视窗口中显示的数据,所以我在[WindowHandler initialize]
{{{}}中AppDelegate
applicationDidFinishLaunching:
1}}。这将启动WindowController
,从而启动Controller
对象。 Controller启动后开始监控数据,这是我想要的结果。
第一次打开窗口时会出现问题:启动Controller
对象的新实例,显然是在加载窗口笔尖时。从这时起,两个Controller
对象正在运行并观察数据,这不仅是不必要的,而且还会增加CPU使用率。此外,我怀疑这种情况很少会导致崩溃(有时候我会得到例外情况说' insertRowsAtIndexes:withRowAnimation:在更新可见行时不会发生!')。
我想在对象属性的概念中或者在绑定的概念中我会遗漏一些东西。 有什么我做错了吗?或者有一种很好的方式来做我想做的事情? 任何帮助赞赏!提前谢谢!