gpt4 book ai didi

objective-c - 在没有 NSObject 的情况下使用 Objective-C?

转载 作者:可可西里 更新时间:2023-11-01 09:20:36 25 4
gpt4 key购买 nike

我正在 Windows(cygwin、gcc)上测试一些简单的 Objective-C 代码。此代码已在 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

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

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 教程中寻找这个,但是我找到的每个类示例都继承自 NSObject。如果没有 Cocoa 或某种提供 NSObject 的 Cocoa 替代品,真的不可能编写 Objective-C 吗?

(是的,我知道 GNUstep。如果可能的话,我真的宁愿避免使用它...)

编辑 这有效:

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

虽然不是很有用......

最佳答案

可以创建没有基类的类。有几件事正在发生。首先,您的编译器似乎不喜欢“()”类扩展语法。其他编译器可以接受。如果您在 MyObject.m 的第四行删除那些“()”,那么您的编译器将提示您有两个重复的 MyObject 类接口(interface)。出于测试目的,您应该将该 _field 变量移动到头文件中 MyObject 的声明中,例如:

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

然后你就可以完全删除.m 文件中那个多余的@interface 了。这至少应该让你开始。

关于objective-c - 在没有 NSObject 的情况下使用 Objective-C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19473682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com