微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用没有NSObject的Objective-C?

我在Windows上testing一些简单的Objective-C代码(cygwin,gcc)。 这段代码已经在Mac上的Xcode中起作用了。 我想转换我的对象不是NSObject子类(或其他任何东西,大声笑)。 这是可能的,以及如何?

我到目前为止:

// MyObject.h @interface MyObject - (void)myMethod:(int) param; @end

// MyObject.m #include "MyObject.h" @interface MyObject() { // this line is a Syntax error,why? int _field; } @end @implementation MyObject - (id)init { // what goes in here? return self; } - (void)myMethod:(int) param { _field = param; } @end

当我尝试编译时会发生什么:

最大化窗口维护任务栏限制

在本地子网中查找可用的设备名称重命名设备

我怎样才能捕捉到另一个进程的未处理的exception?

是否可以使用.Net框架以编程方式logging对Windows共享(SMB共享)的访问?

使用SystemParametersInfo协助

gcc -o test MyObject.m -lobjc MyObject.m:4:1: error: expected identifier or '(' before '{' token MyObject.m: In function '-[MyObject myMethod:]': MyObject.m:17:3: error: '_field' undeclared (first use in this function)

编辑我的编译器是cygwin的gcc,也有cygwin gcc-objc包:

gcc --version gcc (GCC) 4.7.3

我已经尝试在线寻找这个,并在几个Objective-C教程中,但是我发现从NSObjectinheritance的每一个类的例子。 如果没有Cocoa或者提供NSObject的Cocoa替代品,编写Objective-C是不可能的?

(是的,我知道GNUstep,如果可能的话,我真的宁愿避免)

编辑这工作:

// MyObject.h @interface MyObject @end // MyObject.m #include "MyObject.h" @implementation MyObject @end

虽然不是很有用

写入单个日志文件的多个进程

laravel可执行应用程序

如何在命令提示符下退出python脚本

Windows操作系统中是否存在零拷贝?

事件查看器中的行号

可以在没有基类的情况下创建类。 有几件事情正在进行。 首先,你的编译器似乎不喜欢“()”类的扩展语法。 其他编译器也可以。 如果你在MyObject.m的第四行删除了那些“()”,那么你的编译器会抱怨你有两个MyObject类的重复接口。 为了您的测试目的,您应该将_field变量移动到头文件中的MyObject声明中,如:

@interface MyObject { int _field; } -(void)myMethod:(int)param; @end

然后,您可以完全删除.m文件中的额外的@interface。 这应该让你至少开始。

这是可能的,但是请注意NSObject在objective-c中实现了内存分配API,如果你没有在一个根类上实现NSObject的+alloc和-dealloc或者等价物,你仍然需要实现相同的功能每班。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐