默认的Cocoa应用程序ViewController.m问题?

时间:2015-06-19 18:19:49

标签: objective-c macos cocoa

新手问题随之而来......

我正在学习基于Objective C的OS X Cocoa应用程序开发。我拥有的大多数书籍和视频都是针对iOS的,因此我将一些简单的iOS代码示例转换为OS X.

当我创建一个新的OS X“Cocoa Application”项目时,选中“use Storyboards”框,我新创建的项目中的默认ViewController.m没有@interface部分。这是预期的吗?

对我最近的问题Cocoa ViewController.m vs. Cocoa Touch ViewController.m的回复表明另一个用户的默认ViewController.m DOES有一个@interface部分。

目前,我手动为IBOutlets键入@interface部分。 这是其他人在做什么?或者我有一些配置问题?

我在Yosemite上使用Xcode 6.3.2。

这是我的默认ViewController.m

//
//  ViewController.m
//  testME
//
//  Created by ME on 6/19/15.
//  Copyright (c) 2015 ME. All rights reserved.
//

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.
}

- (void)setRepresentedObject:(id)representedObject {
    [super setRepresentedObject:representedObject];

    // Update the view, if already loaded.
}

@end

1 个答案:

答案 0 :(得分:1)

通常,类的接口(在您的情况下为ViewController)位于头文件(.h)中。

然而,一些开发人员使用将类扩展放在实现文件顶部的约定作为"伪造"私有方法(Objective C没有。)

所以你可以在.m文件中看到这个:

//The parenthesis here indicate a class extension.
@interface ViewController ()

//Only the ViewController class sees this method.
-(void) method;

@end

@implementation ViewController

-(void) method{
    //Do stuff here 
}

@end

这不是iOS或MacOS特有的,而是Objective C. 您可以看到有关Objective C类扩展here的更多信息。

默认的Xcode项目不会为创建的ViewController类添加类扩展。但是,如果您创建一个新的NSViewController子类(通过转到File-> New-> File-> Cocoa Class,然后创建一个类作为NSViewController的子类,您会注意到新的NSViewController子类将具有类扩展在实现文件的顶部生成。但这不是必需的,也不是必需的,只是用来定义最接近的东西,Objective C允许私有接口。

您还可以查看this答案,了解有关实施伪造私有方法的更多详细信息。