这个简单的Objective-C代码到底有什么问题?
我目前正在从C语言转向Objective-C语言,对我来说,这段代码似乎都是一个花花公子,但Xcode却不这么认为。我从互联网上获得了这个代码示例,并一直在不懈地尝试更正它,但我已经走到了死胡同:这个简单的Objective-C代码到底有什么问题?,objective-c,Objective C,我目前正在从C语言转向Objective-C语言,对我来说,这段代码似乎都是一个花花公子,但Xcode却不这么认为。我从互联网上获得了这个代码示例,并一直在不懈地尝试更正它,但我已经走到了死胡同: #include <objc/Object.h> @interface Greeter:Object { /* This is left empty on purpose: ** Normally instance variables would be declared
#include <objc/Object.h>
@interface Greeter:Object
{
/* This is left empty on purpose:
** Normally instance variables would be declared here,
** but these are not used in our example.
*/
}
- (void)greet;
@end
#include <stdio.h>
@implementation Greeter
- (void)greet
{
printf("Hello, World!\n");
}
@end
#include <stdlib.h>
int main(void)
{
id myGreeter;
myGreeter = [Greeter new];
[myGreeter greet];
[myGreeter release];
return 0;
}
这不仅仅是Xcode调试器停在“main”中的默认断点上吗?只需单击“继续”(或“运行”菜单中的类似按钮),您就应该是金色的。这不仅仅是Xcode调试器停在“main”中的默认断点上吗?只需单击“继续”(或“运行”菜单中的类似按钮),您就应该是金色的。您的示例使用GNU运行时,因此有点不推荐。编译器默认为下一个运行时,但可以设置为使用GNU运行时和编译选项
-fgnu runtime
你应该去读一本关于Objective-C的好书,比如Stephen Kochan的《Objective-C编程》
您的示例使用GNU运行时,因此有点不推荐使用。编译器默认为下一个运行时,但可以设置为使用GNU运行时和编译选项
-fgnu runtime
你应该去读一本关于Objective-C的好书,比如Stephen Kochan的《Objective-C编程》
也许我错了,但我一直认为您是这样分配到Objective-C中的
id myGreeter;
myGreeter= [[myGreeter alloc] init];
也许我错了,但我一直认为你是这样分配到Objective-C的
id myGreeter;
myGreeter= [[myGreeter alloc] init];
Greeter:Object
应该是Greeter:NSObject
,“Object”不是objective-c类。Greeter:Object
应该是Greeter:NSObject
,“Object”不是objective-c类。实际上使用new is,某种程度上,是alloc/init的缩写,正如您所读到的
但是,您在Cocoa之外使用objective-c,因为您是从Object继承的,而不是从NSObject继承的,等等。所以我认为应该显式地使用myGreeter=[[myGreeter alloc]init]
另外,既然您说的是Xcode,那么您应该使用Cocoa。尝试:
#import <Cocoa/Cocoa.h>
#导入
然后将Object切换到NSObject,实际上使用new is,有点像alloc/init的缩写,正如您所读到的 但是,您在Cocoa之外使用objective-c,因为您是从Object继承的,而不是从NSObject继承的,等等。所以我认为应该显式地使用myGreeter=[[myGreeter alloc]init] 另外,既然您说的是Xcode,那么您应该使用Cocoa。尝试:
#import <Cocoa/Cocoa.h>
#导入
然后还将Object切换到NSObject您的类,
Greeter
,继承自Objective-C对象
类。在Cocoa中,根类(通常)是NSObject
,您应该从中继承。这可能会解决您的问题。您的类,Greeter
,继承自Objective-C对象
类。在Cocoa中,根类(通常)是NSObject
,您应该从中继承。这可能会解决你的问题。我也不是什么专家,但你为什么不说Greeter myGreeter=[Greeter new]?我不相信“id”会知道你的任何方法,即使你可以给它指定一个问候者。new
和alloc init
可以互换使用。你能发布XCode所说内容的控制台日志吗?@Marvo这很好,你在调用id方法时不会收到警告,因为如果它发出警告,它总是会发出警告,这很烦人。它会在运行时找出你的对象是什么,然后找到你的方法,我也不是什么专家,但是为什么你不说Greeter myGreeter=[Greeter new]?我不相信“id”会知道你的任何方法,即使你可以给它指定一个问候者。new
和alloc init
可以互换使用。你能发布XCode所说内容的控制台日志吗?@Marvo这很好,你在调用id方法时不会收到警告,因为如果它发出警告,它总是会发出警告,这很烦人。它将在运行时找出您的对象并找到您的方法,然后new
是一种基本上将alloc
/init
混合到一个方法中的方法。到OSX出现的时候,它已经基本上被废弃了,但我认为一些Objective-C书籍或其他书籍使用了它(出于某种原因),所以最近学习Objective-C的程序员似乎正在使用它。new
是一种基本上将alloc
/init
混合到一个方法中的方法。当OS X出现时,它几乎已经被废弃了,但我认为某些Objective-C书籍或其他书籍使用了它(出于某种原因),因此最近学习Objective-C的程序员似乎正在使用它。它实际上是一个旧的Objective-C类,来自原始规范。我尝试使用此导入进行编译,但它似乎不是为现代Mac电脑编写的。编辑:啊,我猜是运行时出了问题,根据epatel的帖子。它实际上是一个旧的Objective-C类,来自原始规范。我尝试使用此导入进行编译,但它似乎不是为现代Mac编译的。编辑:啊,我想是运行时出了问题,正如epatel的帖子所说。