我实际上并不打算在我的任何应用程序中使用它,它只用于学习和使用objective-c.
当然,正如预期的那样,我遇到了一些我无法解决的问题.
为了创建我的对象,我做:
+ (ID)create{ return malloc(sizeof(self)); }
和
- (voID)free { free(self); }
调用[TestObject create]时我收到以下控制台消息:
“8/11/10 11:17:31 PM TestingHeap [2675] *** NSInvocation:warning:”AObject“类的对象0x100002100不实现doNotRecognizeSelector: – abort”
所以它试图处理我的对象作为一个NSObject ..?我如何解决这个问题.
另外在没有Foundation或AppKit的情况下进行编译时,我会发现缺少符号的错误,
__objc_empty_vtable和__objc_empty_cache特别.
我试过在/usr/include / objc /
提前致谢.
更新
连接libobjc后,当我尝试从我的课程中调用一个方法时,我收到EXC_BAD_INSTRUCTION.
解决方法 大卫指出,你需要使用class_getInstanceSize而不是sizeof.你需要链接libobjc(当你发现自己).
您的基类需要必须在创建方法中设置的isa指针.
并且运行时需要一个初始化方法被实现,这将在您的类第一次使用之前被调用.如果它丢失了它崩溃.
所以所有的东西在一起你的基础应该至少有这个:
#include <objc/objc.h>#include <objc/runtime.h>#include <stdlib.h>@interface MyBase { Class isa;}+ (ID) alloc;- (voID) free;@end@implementation MyBase+ (voID) initialize;{}+ (ID) alloc;{ size_t size = class_getInstanceSize( self ); MyBase *result = malloc( size ); result->isa = self; return result;}- (voID) free;{ free( self );}@end总结
以上是内存溢出为你收集整理的从头开始重新实现NSObject全部内容,希望文章能够帮你解决从头开始重新实现NSObject所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)