【发布时间】:2010-08-11 21:51:08
【问题描述】:
当我阅读新的 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: 警告: 'AObject' 类的对象 0x100002100 没有实现 doesNotRecognizeSelector: -- abort”
所以它试图将我的对象作为 NSObject.. 来处理?以及如何解决这个问题。
此外,在没有 Foundation 或 AppKit 的情况下进行编译时,我会收到缺少符号的错误, __objc_empty_vtable 和 __objc_empty_cache 尤其如此。 我试过从 /usr/include/objc/ 中包含几个头文件
提前致谢。
更新
与 libobjc 链接后,我在尝试从我的类中调用方法时收到 EXC_BAD_INSTRUCTION。
【问题讨论】:
-
你可能想看看 NSObject 协议,如果你还没有:developer.apple.com/mac/library/documentation/Cocoa/Reference/…
-
包含头文件不会解决来自链接器的缺失符号错误。您需要链接到 libobjc(通常由 Foundation 为您完成)。
-
无论如何,您可能都不想使用
sizeof(self)获取大小。self是一个指针,所以你只会得到指针的大小。您可以改用class_getInstanceSize。
标签: objective-c cocoa cocoa-touch macos nsobject