从头开始重新实现NSObject

从头开始重新实现NSObject,第1张

概述当我阅读关于新的4.0.2 iOS更新时,我想知道黑客做什么或尝试使用缓冲区溢出,其中一些维基百科让我有兴趣玩malloc,从而创建我自己的“NSObject”. 我实际上并不打算在我的任何应用程序中使用它,它只用于学习和使用objective-c. 当然,正如预期的那样,我遇到了一些我无法解决的问题. 为了创建我的对象,我做: + (id)create{ return malloc(sizeof 当我阅读关于新的4.0.2 iOS更新时,我想知道黑客做什么或尝试使用缓冲区溢出,其中一些维基百科让我有兴趣玩malloc,从而创建我自己的“NSObject”.

我实际上并不打算在我的任何应用程序中使用它,它只用于学习和使用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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1027873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存