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运行时的一个组成部分.除了好奇心,调查或实验之外,几乎没有任何理由可以实现你自己的根类(但是,根本不应该劝阻它).