【问题标题】:Beginner: Difference between Xcode 3 and Xcode 4 specifically NSfunctions初学者:Xcode 3 和 Xcode 4 之间的区别,特别是 NSfunctions
【发布时间】:2011-10-27 00:04:23
【问题描述】:

我正在从一本名为 How To Become and Xcoder 的方便的免费电子书中学习 objc 和 Xcode,这非常方便。除了它是在 2007 年用 Xcode 3 编写的,它的样本都来自那个版本,不幸的是我有 OSX Lion 和 Xcode 4。所以对于我的问题。他们提供了一个示例代码块,如下所示:

//start
#import <Foundation/Foundation.h
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
//end

所以我的问题是我收到超过 20 个错误,并且 Xcode 无法识别 NSAutoreleasePool 或 NSLog 命令。 有谁知道为什么这不起作用?我已经添加了 Foundation 框架。 我已经意识到 printf 命令比 NSLog 命令工作得更好(据我所知,它更常用于错误报告)所以是的,任何帮助都会很好。

【问题讨论】:

  • 你在foundation的导入中缺少结尾'>',这也可能是问题的原因:#import &lt;Foundation/Foundation.h&gt;
  • 您还将 IDE (Xcode) 与 API (Cocoa) 混淆了。

标签: objective-c xcode4 nslog nsautoreleasepool


【解决方案1】:

如果NSLog 未被识别,这对于 Xcode 3 和 Xcode 4 来说不是问题。您的代码不包括最基本的 Objective-C 运行时代码。我会假设它被编译为 C 而不是 Objective-C。

您说您必须添加 Foundation 框架 - 这表明您没有使用基于 Objective-C 的模板开始您的项目。当您选择 New Project... 时,您选择了哪个模板?任何 iOS 应用程序模板都应该可以工作,大多数 Mac OS X 应用程序模板应该可以工作。如果您选择构建命令行工具,则应选择 Foundation 作为类型。

编辑:另外,我应该补充一点,自动释放池的语法在最新版本的 Xcode 中发生了变化,因为默认使用 ARC。您可以关闭 ARC,也可以阅读它以了解其中的差异。您可能会发现使用 ARC 会更轻松,因为您需要担心的内存管理要少得多,但如果您关注的书没有考虑到这一点,则必须牢记这一点。

【讨论】:

  • 谢谢,我确实选择了一个命令行工具,但我看不到在哪里选择基础作为类型。我再去看看。正如我所说,我的教程展示了如何在 Xcode 3 中进行操作,但是当我查看选择模板菜单时,它完全不同。不过感谢您的帮助,尽管听起来很有用,我还是会研究一下 ARC。
【解决方案2】:

基金会位于您需要为项目命名的屏幕上。作为默认值,它设置为 C,在您的情况下,您需要单击下拉菜单并选择 Foundation。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多