Я тестирую простой код Objective-C в Windows (cygwin, gcc). Этот код уже работает в Xcode на Mac. Я хотел бы преобразовать свои объекты в подкласс 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. Неужели невозможно написать Objective-C без Какао или какой-либо замены Какао, которая предоставляет NSObject?
(Да, я знаю о GNUstep. Я бы предпочел избежать этого, если возможно ...)
ИЗМЕНИТЬ Это работает:
// MyObject.h
@interface MyObject
@end
// MyObject.m
#include "MyObject.h"
@implementation MyObject
@end
Хотя не очень полезно ...
[[MyObject alloc] init]
содержит две отправки сообщений. Вам нужноobjc_msgSend()
. Возможно, ваш компилятор автоматически включает libobjc, когда вы компилируете исходный код ObjC, без вашего ведома. - person jscs   schedule 20.10.2013