新手问题随之而来......
我正在学习基于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
答案 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答案,了解有关实施伪造私有方法的更多详细信息。