gpt4 book ai didi

objective-c - 如何在 Objective-C 中实例化一个不从 NSObject 继承的类

转载 作者:太空狗 更新时间:2023-10-30 03:15:33 26 4
gpt4 key购买 nike

鉴于此:

人.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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com