【问题标题】:Why does creating a new Objective-C class file in XCode4 not create a "An Objective-C class, with a header that includes the <Cocoa/Cocoa.h> header."为什么在 XCode4 中创建一个新的 Objective-C 类文件不会创建一个“具有包含 <Cocoa/Cocoa.h> 标头的标头的 Objective-C 类”。
【发布时间】:2011-04-15 19:49:24
【问题描述】:

当我在 XCode 4 中创建一个新的 Objective-C 类文件时,它会创建两个文件:

内容为:

#import <Foundation/Foundation.h>


@interface MyClass : NSObject {
@private

}

@end

一个内容是:

#import "MyClass.h"


@implementation MyClass

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)dealloc
{
    [super dealloc];
}

@end

我是一个初学者,正在阅读一本 Dummies 书,这不是我在 XCode3 中创建新文件时经常看到的内容。另外,向导说文件的标题中应该有一个&lt;Cocoa/Cocoa.h&gt;,但这些文件的标题中有Foundation.h

【问题讨论】:

标签: objective-c cocoa xcode templates xcode4


【解决方案1】:

你正在读一本旧书。如果你看一下 Cocoa.h 它正在导入:

  • #import Foundation/Foundation.h
  • #import AppKit/AppKit.h
  • #import CoreData/CoreData.h

这是 Mac OS X 上大多数 Cocoa 应用程序的标准做法。现在,我们有 iOS,它不使用 AppKit.framework; iOS 使用 UIKit.framework。所以模板只会导入Foundation.h。这样,您就可以在面向 Mac OS X 或 iOS 平台的项目中使用您的子类。这样您就不必为不同的平台编写#define 语句。

如果您查看 Mac OS X 项目的预编译头文件 (.pch),它将为您导入 Cocoa.h,该文件导入 AppKit.h。 iOS 项目 .pch 导入 UIKit.h

【讨论】:

    【解决方案2】:

    • 查看 Xcode 模板/Developer/Library/Xcode/Templates/File Templates
    • 尤其是Cocoa/ 文件夹中的 Cocoa 模板

    我可以看到:

    • NSDocument, NSView, NSViewController, NSWindowController 模板正在导入 Cocoa.h
    • NSObject 又名神奇的___VARIABLE_cocoaSubclass___ 在模板中是唯一一个导入Foundation.h

    这就是你在界面中看到的:

    所以解释很简单,尽管描述了“Cocoa”模板,如果您使用上面列出的 Cocoa 类,则将导入 Cocoa.h,否则将导入 Foundation.h

    这是有道理的,因为模板不够智能,无法确定应该导入的内容,而良好的编码习惯是尽可能少地导入。

    【讨论】:

      【解决方案3】:

      在您的项目中,您有一个 MyProjectName-Prefix.pch 文件。这是您的预编译头文件。 此处列出的标头会以更有效的方式自动包含在项目中的每个其他标头中(“预编译”位)。 如果你打开它你会看到#import &lt;Cocoa/Cocoa.h&gt;

      【讨论】:

        猜你喜欢
        • 2012-08-23
        • 1970-01-01
        • 2014-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多