gpt4 book ai didi

macos - 我的新 Controller 的父类(super class)应该是什么?

转载 作者:行者123 更新时间:2023-12-03 16:38:26 25 4
gpt4 key购买 nike

我是一个内部程序的开发人员,用于对充液壳体的谐波和其他属性进行建模。目前,整个程序假设计算中一次仅使用一组物理属性(温度、压力等)。我已经将所有计算分解为球体模型。我有一个拥有一个球体的 Controller 。当用户更改物理属性时, Controller 让球体重新计算所有内容并更新所有显示球体计算结果的窗口。

现在有人要求我制作一张表格,显示特定谐波在一定温度和压力范围内的频率。我认为这将需要一个具有自己的球体模型的新 Controller ,因为它需要独立于所有其他窗口。

这是我的问题:我的新 Controller 应该是 NSWindowController 子类还是应该是 NSObject 子类,其属性是 NSWindow,其文本字段绑定(bind)到 Controller 中的值(或完全不同的东西)?我是公司中唯一的开发人员,在过去的四年里,我在编写这个程序时自学了 Cocoa,所以我不确定我是否始终遵循最佳实践。由于我即将推出一项新的重要功能,因此我想确保我做得正确。

不确定这是否重要,但该解决方案必须在 OS X 10.5 下运行,因为我们组织中仍然有一些 G5 计算机。

最佳答案

如果您有一个控制特定窗口的 Controller ,那么您绝对应该使用 NSWindowController 子类,因为 NSWindowController 处理一些更复杂的 Nib 加载以及内存管理问题。

除非新窗口中的 Sphere 模型将显示与主 Controller 中不同的一组数据,否则您不需要为新 Controller 创建新模型。您只需在主 Controller 中引用球体实例即可。

类似这样的事情:

.h:

#import <Cocoa/Cocoa.h>

@class Sphere;

@interface FrequenciesController : NSWindowController
{
Sphere* sphere;
}
- (id)initWithSphere:(Sphere*)aSphere;
@end

.m:

#import "FrequenciesController.h"
#import "Sphere.h"

@implementation FrequenciesController
- (id)initWithSphere:(Sphere*)aSphere
{
self = [super initWithWindowNibName:@"NameOfYourNib"];
if (self)
{
sphere = [aSphere retain];
}
return self;
}

- (void)dealloc
{
[sphere release];
[super dealloc];
}
@end

要创建窗口,您只需在主 Controller 中执行类似的操作,假设您已将 frequenciesController 声明为 ivar:

- (IBAction)showFrequenciesWindow:(id)sender
{
if(!frequenciesController)
{
frequenciesController = [[FrequenciesController alloc] initWithSphere:self.sphere];
[frequenciesController showWindow:self];
}
}

关于macos - 我的新 Controller 的父类(super class)应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8718764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com