Тествам някакъв прост 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)
РЕДАКТИРАНЕ Моят компилатор е gcc на cygwin, също има пакет gcc-objc на cygwin:
gcc --version
gcc (GCC) 4.7.3
Опитах се да потърся това онлайн и в няколко урока за Objective-C, но всеки пример за клас, който открих, наследява от NSObject. Наистина ли е невъзможно да се напише Objective-C без Cocoa или някакъв вид заместител на Cocoa, който осигурява 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