我正在尝试在 Ubuntu Hardy 上编译以下 Objective-C 程序,但由于某些原因,我收到了警告。
#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog (@"Hello");
[pool drain];
return 0;
}
编译器的输出:
$ gcc `gnustep-config --objc-flags` -lgnustep-base objc.m
This is gnustep-make 2.0.2. Type 'make print-gnustep-make-help' for help.
Making all for tool LogTest...
Compiling file objc.m ...
objc.m: In function ‘main’:
objc.m:6: warning: ‘NSAutoreleasePool’ may not respond to ‘-drain’
objc.m:6: warning: (Messages without a matching method signature
objc.m:6: warning: will be assumed to return ‘id’ and accept
objc.m:6: warning: ‘...’ as arguments.)
Linking tool LogTest ...
执行结果如下:
$ ./a.out
2009-06-28 21:38:00.063 a.out[13341] Hello
Aborted
我已经完成了:
apt-get install build-essential gnustep gobjc gnustep-make libgnustep-base-dev
我该如何解决这个问题?
最佳答案
首先,简单的答案:改用-release
。我相信 -drain
是在 10.4 中作为 -release
的别名添加的,并且在 10.5 中它获得了自己的 GC 特定行为。这允许代码在 10.5 中使用它并且仍然可以在 10.4 下工作。 GNUstep 可能还没有新功能。
显然,您正在 Ubuntu 上尝试一些样板 Objective-C 代码,但这让我想知道您希望在长期内完成什么。如果只是出于好奇或挑战,请不要让我阻止您。但是,如果您打算使用 GNUstep 来开发用于严肃编程的 Objective-C,出于多种原因,我建议您不要这样做。
- Objective-C 是一种有趣的编程语言,具有许多强大的功能,但(就其本身而言)并没有比其他面向对象的语言强多少。当您将 Objective-C 与 Cocoa 和其他相关框架中的酷特性结合使用时,它真的会变得引人注目。 Apple(主要)驱动这些框架,并且仅适用于 Mac/iPhone。
- Apple 通常拥有最好的 Objective-C 开发工具和用户体验。他们还大力投资开发 LLVM和 Clang作为 gcc 的替代品。这将(并且已经)使 gcc 未设计的一些非常酷的东西成为可能。
- GNUstep 是一个令人钦佩的项目,但由于它依赖于志愿者和对 Apple 添加的新功能进行逆向工程,因此它总是落后于最先进的技术水平。新的 Shiny 的 Objective-C 功能将始终从 Apple 开始,并且(通常)最终逐渐渗透。
- 构建跨平台应用程序可以在 Objective-C 中完成,但其他语言更适合这项任务。 (我并不是一个狂热的粉丝,我认为 Objective-C 是解决所有问题的最佳解决方案。使用你手边最好的工具。)
我并不是说在“本地平台”之外的其他东西上使用语言是不好的。我只是建议,如果这就是您要做的事情,您应该意识到潜在的问题,并确保您确信利大于弊。
关于objective-c - ‘NSAutoreleasePool’ 在 Ubuntu 上可能无法响应 ‘-drain’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056594/