Cocoa ViewController.m与Cocoa Touch ViewController.m

时间:2015-06-17 18:08:06

标签: objective-c macos cocoa

总新手问题如下......

我正在学习基于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代码有效,我只是想了解平台之间的差异,并确保我朝着正确的方向前进。

2 个答案:

答案 0 :(得分:1)

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

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

@end

@implementation MasterViewController

你可以通过已发布的问题

来区分cocoa和cocoa touch

答案 1 :(得分:1)

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

enter image description here

所以我不确定你为什么会这么看。

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

除非外部对象需要引用您的商店,否则我会继续将它们放在您的实施文件中。如果由于某种原因没有为您生成,那么手动输入您自己的类扩展以声明属性没有任何问题