作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
鉴于此:
人.h:
@interface Person
{
}
- (void) sayHello;
@end
人.m:
#import "Person.h"
@implementation Person
- (void)sayHello
{
printf("%s", "Steve");
}
@end
如何实例化 Person?我试过这个:
Person *p = [Person new];
那行不通,这个也行:
Person *p = [Person alloc];
[更新]
我忘了告诉你,我已经尝试从 NSObject 继承,new 和 alloc 工作。我只是好奇我们是否可以实例化一个不继承自 NSObject 的类?
最佳答案
你绝对可以这样做。你的类只需要实现 +alloc
本身,就像 NSObject
那样。从根本上说,这只是意味着使用 malloc()
获取足够大的内存块以适应定义类实例的结构。
引用计数内存管理也很好(retain
/release
);这实际上是 NSObject
protocol 的一部分.您也可以采用该协议(protocol)并实现这些方法。
引用可以看the Object
class ,这是一个根 ObjC 类,如 NSObject
,Apple 在其开源存储库中为 Objective-C 运行时提供:
@implementation Object
// Snip...
+ alloc
{
return (*_zoneAlloc)((Class)self, 0, malloc_default_zone());
}
// ...
- init
{
return self;
}
// And so on...
也就是说,您应该将 NSObject
视为 ObjC 运行时的组成部分。出于好奇、调查或实验(然而,根本不应该气馁),几乎没有任何理由实现您自己的根类。
关于objective-c - 如何在 Objective-C 中实例化一个不从 NSObject 继承的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954075/
我是一名优秀的程序员,十分优秀!