Tôi đã thử mã này:Điều gì cần thiết để triển khai lớp gốc của Mục tiêu-C?
// main.m
#import <stdio.h>
@interface Test
+ (void)test;
@end
@implementation Test
+ (void)test
{
printf("test");
}
@end
int main()
{
[Test test];
return 0;
}
với LLVM/Clang không có khung nào, nó không được biên soạn với lỗi này:
Undefined symbols:
"_objc_msgSend", referenced from:
_main in main.o
ld: symbol(s) not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Vì vậy, tôi đã thêm libobjc.dylib
. Mã đã được biên dịch, nhưng đã ném ngoại lệ thời gian chạy này:
objc[13896]: Test: Does not recognize selector forward::
Program received signal: “EXC_BAD_INSTRUCTION”.
#0 0x9932a4b4 in _objc_error
#1 0x9932a4ea in __objc_error
#2 0x993212b6 in _objc_msgForward
#3 0x99321299 in _objc_msgForward
#4 0x99321510 in _class_initialize
#5 0x99328972 in prepareForMethodLookup
#6 0x99329c17 in lookUpMethod
#7 0x99321367 in _class_lookupMethodAndLoadCache
#8 0x99320f13 in objc_msgSend
#9 0x00001ee5 in start
Tôi đã thực hiện một số yêu cầu đối với lớp gốc nhưng tôi không biết phải làm gì tiếp theo. Điều gì cần thiết để tạo một lớp gốc mới? Và có bất kỳ đặc điểm kỹ thuật cho điều này?
Tôi tìm thấy một nguồn tài nguyên có giá trị: http://code.google.com/p/ purefoundation/ Tuy nhiên, vẫn không biết về các thông số kỹ thuật – Eonil
Chỉ để tham khảo sau này, nguồn chạy objc nguồn mở của Apple chứa nguồn 'NSObject' quá – Eonil