Objective c xcode 3.2.6:在@标记之前应该有表达式

Objective c xcode 3.2.6:在@标记之前应该有表达式,objective-c,xcode,xcode4,xcode3.2,Objective C,Xcode,Xcode4,Xcode3.2,我是xcode和Objective-C编程领域的新手。现在我正在通过“目标C-编程:大呆子牧场指南”学习编程。由于OSX版本较旧,我只能安装xcode 3.2.6。但是这本书使用了最新的xcode版本 在阅读这些章节时,我遇到了一个问题: #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool{ NSDate *now =

我是xcode和Objective-C编程领域的新手。现在我正在通过“目标C-编程:大呆子牧场指南”学习编程。由于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;
}
#导入
int main(int argc,const char*argv[]
{
@自动释放池{
NSDate*现在=[NSDate日期];
NSLog(@“日期是%@”,现在);
}
返回0;
}
此代码示例给出以下错误:

“在@-标记之前应为表达式”

在web中搜索解决方案时,我发现这是xcode 4的一种新语法。。。我不知道3.2.6和最新版本之间有这么大的区别。现在我的问题是:这是否意味着xcode 4中的所有语法都已更改为以前的版本,而这本书对我来说毫无意义?还是仅仅是这句话?(如果是,如何在旧版本中编写?我甚至不知道这句话有什么好处,因为我是一个该死的初学者)

你把Xcode(IDE)和SDK搞混了。@autorelease池注释是在iOS5SDK中添加的,Xcode 4正好提供给您。如果你想在Xcode 3.x中运行它,你需要确保你使用的是iOS5SDK

你把Xcode(IDE)和SDK搞混了。@autorelease池注释是在iOS5SDK中添加的,Xcode 4正好提供给您。如果你想在Xcode 3.x中运行它,你需要确保你使用的是iOS5SDK

总之,是的

苹果,因为他们几乎拥有整个堆栈,可以随心所欲地更改语言,3.0到4.0有一些更改。在这一点上,我真的不会浪费时间试图用3来编写IOS程序

这些类的API随着iOS在3和4以及4和5之间发生了变化

我真的建议,在这一点上,将你的Mac升级到至少支持XCODE 4的版本。

总之,是的

苹果,因为他们几乎拥有整个堆栈,可以随心所欲地更改语言,3.0到4.0有一些更改。在这一点上,我真的不会浪费时间试图用3来编写IOS程序

这些类的API随着iOS在3和4以及4和5之间发生了变化


我真的建议,在这一点上,将您的Mac升级到至少支持XCODE 4的版本。

用以下代码替换
@autoreleasepool{}

NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSDate *now = [NSDate date];
NSLog(@"The date is %@", now);
[pool release];

用以下代码替换
@autoreleasepool{}

NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSDate *now = [NSDate date];
NSLog(@"The date is %@", now);
[pool release];

您得到的消息涉及Objective-C的一个新特性,即ARC,旨在简化内存管理。它可以在从Xcode4开始的Apple ObjC编译器上获得


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

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


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

谢谢,这非常有效!因此,解决方案是使用
NSAutoreleasePool*pool=[NSAutoreleasePool new];(..)[池释放]
而不是
@autoreleasepool{}
?但我将来会面临更多的语法差异,对吗?在使用旧SDK时,总是存在导致向后兼容性问题的差异。幸运的是,iOS SDK版本之间没有太多语法差异。也就是说,苹果强烈鼓励你只使用最新和最好的。除非你真的知道你在做什么以及为什么,否则你应该安装Xcode 4.x。这应该是这个问题的最佳答案。谢谢,这非常有效!因此,解决方案是使用
NSAutoreleasePool*pool=[NSAutoreleasePool new];(..)[池释放]
而不是
@autoreleasepool{}
?但我将来会面临更多的语法差异,对吗?在使用旧SDK时,总是存在导致向后兼容性问题的差异。幸运的是,iOS SDK版本之间没有太多语法差异。也就是说,苹果强烈鼓励你只使用最新和最好的。除非你真的知道你在做什么以及为什么,否则你应该安装Xcode 4.x。这应该是这个问题的首要答案。实际上,
@autoreleasepool{}
并不是ARC特有的,尽管它是在同一时间引入的。请注意,还有许多其他语言差异会导致类似问题。OP在没有买一本旧书或[更好]升级到现代版本的OS和Xcode的情况下,将经历一段艰难的旅程。实际上,
@autoreleasepool{}
并不是ARC特有的,尽管它是在同一时间推出的。请注意,还有许多其他语言差异会导致类似问题。OP在不买一本旧书或[更好]升级到现代版本的OS和Xcode的情况下,将经历一段艰难的旅程。