这里有一段代码我在一个论坛中找到了一个关于在Objective-C中使用gcc在Ubuntu(而不是clang)上进行编程的代码,但它只适用于clang(在Ubuntu上)! 从代码中你很容易理解这是我第一次尝试在Objective-C中做一些事情(我知道C和C ++,这个尝试对于iOS的未来编程来说是有道理的)
// prova.m
#import <objc/Object.h>
#import <stdio.h>
@interface Number: Object
{
@public
int number;
}
- (void)printNum;
@end
@implementation Number: Object
- (void)printNum
{
printf("%d\n", number);
}
@end
int main(void)
{
Number *myNumber = [Number new]; // equal to [[Number alloc] init]
myNumber->number = 6;
[myNumber printNum];
return 0;
}
这在clang中运行正常但在gcc中它会编译并发出警告并在执行时出现分段错误。
$ gcc -o prova.out prova.m -lobjc
prova.m: In function ‘main’:
prova.m:28:5: warning: ‘Number’ may not respond to ‘+new’ [enabled by default]
prova.m:28:5: warning: (Messages without a matching method signature [enabled by default]
prova.m:28:5: warning: will be assumed to return ‘id’ and accept [enabled by default]
prova.m:28:5: warning: ‘...’ as arguments.) [enabled by default]
$ ./prova.out
Errore di segmentazione (core dump creato)
答案 0 :(得分:3)
Object
;哇。那是老派。
除非您的Object
类定义了+new
类方法,否则您的子类不会响应该方法。您需要实施new
或取消对new
的调用。
它正在使用一个编译器进行编译,但不是其他气味,就像您正在编译运行时的两个不同版本。