如何确定代码是否在命令行工具或GUI应用程序中运行?

时间:2012-09-29 19:03:46

标签: objective-c foundation

我正在编写一个包含两个目标的Mac应用程序 - 常规Cocoa GUI和Foundation命令行工具。除了GUI之外,它们的功能非常相似,所以我在两者之间共享大部分代码。

我想根据正在运行的目标略微区别地做一些事情。我可以想到很多方法(#define pch中的东西,检查GUI定义是否存在......)。我很好奇是否有标准或推荐的方法来做到这一点。谢谢!

2 个答案:

答案 0 :(得分:2)

我建议将代码分为三部分:GUI应用程序,命令行工具和它们都链接的库,它们可以完成实际工作。然后,您可以在库中使用API​​进行配置,并使用命令行工具和应用程序以不同的方式使用API​​。

答案 1 :(得分:0)

在面向对象编程中有一个标准的职责分离实践:model view controller。遵循此模式时,您可能不需要知道代码是在命令行环境还是图形用户界面环境中运行。如果您认为有必要区分的情况,请描述情况。

即使您需要区分这两种情况,您也应该在每个可执行文件中具有一些可以作为参数传递的唯一属性。例如,假设您要记录屏幕大小。对于基础命令行工具,您可能希望屏幕尺寸为固定宽度字符数(例如80x25)的X / Y尺寸,但在GUI中,您需要像素数(例如1280x1024)。使用此期望创建您的界面,例如:

- (CGSize)screenSizeForAppContext:(int)context
{
    // You could define 0 to mean command-line tool, 1 to mean GUI app
    if (0 == context) {
        // return screen size by characters
    } else if (1 == context) {
        // return screen size by pixels
    }
    return CGSizeZero;
}