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

Hao*_*Hao 17 class objective-c instantiation

鉴于这种:

Person.h:

@interface Person 
{
}
- (void) sayHello;
@end
Run Code Online (Sandbox Code Playgroud)

Person.m:

#import "Person.h"

@implementation Person 

- (void)sayHello 
{
    printf("%s", "Steve");
}

@end
Run Code Online (Sandbox Code Playgroud)

你如何实例化这个人?我试过这个:

Person *p = [Person new];
Run Code Online (Sandbox Code Playgroud)

这不起作用,也不是这样的:

Person *p = [Person alloc];
Run Code Online (Sandbox Code Playgroud)

[UPDATE]

我忘了告诉,我已经尝试从NSObject继承,新的和alloc工作.我只是好奇我们是否可以实例化一个不从NSObject继承的类?

Jos*_*ell 30

你绝对可以这样做.你的班级只需要实现+alloc自己,就像这样NSObject做.在基础上,这只是意味着使用malloc()一大块内存足以适应定义类实例的结构.

引用计数的内存管理也很不错(retain/ release); 这实际上是NSObject 协议的一部分.您也可以采用该协议并实现这些方法.

作为参考,你可以看看Object,它是一个根ObjC类一样NSObject,苹果在Objective-C的运行时其开源库提供:

@implementation Object 

// Snip...

+ alloc
{
    return (*_zoneAlloc)((Class)self, 0, malloc_default_zone()); 
}

// ...

- init
{
    return self;
}

// And so on...
Run Code Online (Sandbox Code Playgroud)

话虽如此,您应该将其NSObject视为ObjC运行时的一个组成部分.除了好奇心,调查或实验之外,几乎没有任何理由可以实现你自己的根类(但是,根本不应该劝阻它).

  • +1这绝对是正确的答案.真的,*只有*你不想继承`NSObject`的时候就是你要在内存管理方面做一些*根本不同的事情. (6认同)