0

我在 xcode 和 Objective-C- 编程的世界里很新。现在我正在通过“Objective C- Programming: The big Nerd Ranch Guide”学习编程。由于 OSX 版本较旧,我只能安装xcode 3.2.6。但是本书使用了最新的 xcode 版本。

在浏览章节时,我遇到了一个问题:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
    @autoreleasepool{   
        NSDate *now = [NSDate date];    
        NSLog(@"The date is %@", now);
    }
    return 0;
}

此代码示例给了我以下错误:

“@-token 之前的预期表达式”

在网上搜索解决方案时,我发现它是 xcode 4 的新语法...我不知道 3.2.6 和最新版本之间存在如此大的差异。现在我的问题是:这是否意味着 xcode 4 中的所有语法都已更改为以前的版本,而这本书对我来说毫无意义?还是只是这个说法?(如果是,如何用旧版本写?我什至不知道那句话有什么用,因为我是一个血腥的初学者)

4

4 回答 4

1

您将 Xcode(IDE)与 SDK 混淆了。@autorelease 池注解被添加到 iOS 5 SDK 中,Xcode 4 恰好给了你。如果您希望它在 Xcode 3.x 中运行,您需要确保使用 iOS 5 SDK 运行它。

于 2012-04-09T18:37:22.530 回答
1

总之,是的。

Apple,因为他们几乎拥有整个堆栈,可以随意更改语言,并且 3.0 到 4.0 有一些更改。在这一点上,我真的不会浪费我的时间尝试在 3 中编写 IOS 程序。

这些类的 API 在 iOS 3 和 4 和 4 和 5 之间也发生了变化。

我真的建议,此时将您的 Mac 升级到至少支持 XCODE 4 的东西。

于 2012-04-09T18:38:37.067 回答
1

替换@autoreleasepool {}为以下代码:

NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSDate *now = [NSDate date];
NSLog(@"The date is %@", now);
[pool release];
于 2012-04-09T18:38:57.847 回答
0

您收到的消息指的是 Objective-C 的一项新功能,称为 ARC,旨在简化内存管理。它在从 Xcode4 开始的 Apple ObjC 编译器上可用。

你仍然可以使用这本书,但你应该删除所有与 ARC 相关的语句(这不仅仅是 @autoreleasepool),实际上这并不容易,因为你还需要添加内存管理。

于 2012-04-09T18:40:54.823 回答