【问题标题】:Cocoa ViewController.m vs. Cocoa Touch ViewController.mCocoa ViewController.m 与 Cocoa Touch ViewController.m
【发布时间】:2015-06-17 18:08:05
【问题描述】:

总的新手问题如下...

我正在学习基于 Objective C 的 Cocoa (OS X) 应用程序开发。我拥有的大部分书籍和视频都是基于 iOS 的,所以我看到了这两个平台的不同之处。

我已经将一个简单的 iOS 应用程序转换为 OS X。我让转换后的 OS X 应用程序可以正常工作,但我有一个问题:为什么 OS X ViewController.m 文件没有 @interface 部分?

我使用 Interface Builder 创建了 iOS 应用程序,在助手编辑器中将 UI 元素从 Main.Storyboard 拖到 ViewController.m。我将一个 UILabel 单元格拖入 ViewController.m 的 @interface 部分,创建了一个实例变量 @property。在 iOS 中,ViewController.h public @interface 部分保持为空。

在 OS X 应用程序中,我将一个 NSTextField 单元格拖到 ViewController.h 文件的 @interface 部分以创建一个类似的实例变量。

OS X ViewController.h @interface 部分是 IBOutlets 的正确位置吗?这不会将这些实例变量暴露给其他类吗?在 iOS 案例中,由于实例变量没有添加到 ViewController.h 文件中,我认为它们是隐藏的,对吗?我可以将 OS X 实例变量设为私有吗?

正如我所提到的,OS X 代码有效,我只是想了解平台之间的差异,并确保我朝着正确的方向前进。

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    在我回答之前,我想检查一下是否发生了同样的事情——但是当我在新的 iOS 或 OS X 应用程序中创建自定义 NSViewController 时,两者都会在实现文件 (.m文件)

    所以我不确定你为什么会看到这种情况。

    但是,为了回答您的问题,(如您所说)在您的头文件 (.h) 中的 @interface 中声明的属性是公开的。而实现中@interface 中声明的属性是私有的。这是因为您的实现内部的@interface 称为“扩展”。这基本上只是一个匿名的“类别”。

    除非外部对象需要引用您的 outlet,否则我会继续将它们放在您的实现文件中。如果由于某种原因没有为您生成一个,手动输入您自己的类扩展来声明属性并没有错

    【讨论】:

    • 非常感谢您的回复。你是怎么得到你的代码的?我在优胜美地上使用 Xcode 6.3.2。当我使用 File > New > Project... 创建一个新项目时,然后在 OS X Application 下选择“Cocoa Application”。我选择了“使用故事板”。当新项目打开时, ViewController.m 没有 @interface 部分。 Main.storyboard 显示了一个 Window Controller 和一个 ViewController。我没有添加任何额外的 ViewController,我只是使用自动创建的 ViewController。你在做不同的事情吗?
    • 而且,是的,我验证我可以手动添加@interface 代码。这是一个简单的解决方法...
    • 我也在做同样的事情——我不确定你为什么不为你生成扩展名@interface。很高兴听到它有效^^
    • 好的。感谢您的确认。我将尝试在一个单独的问题中弄清楚为什么我的 ViewController.m 文件与您的不同。
    【解决方案2】:

    是的,您是对的,不应将实例变量添加到 ViewController.h 文件中以使其私有。就像您可以在 OS X 中将实例变量作为私有变量一样。像这样`@interface MasterViewController()

    @property(非原子,弱)NSString* strTemp;

    @结束

    @implementation MasterViewController

    您可以通过已经发布的问题来了解可可和可可触摸之间的区别

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多