为什么会出错;无法初始化类对象";在我执行objective-C程序时发生?
我刚开始学习objective-C。我的第一个问题是我不能运行下面的源代码 以下是我的源代码:为什么会出错;无法初始化类对象";在我执行objective-C程序时发生?,objective-c,Objective C,我刚开始学习objective-C。我的第一个问题是我不能运行下面的源代码 以下是我的源代码: #import <Foundation/NSObject.h> #import <stdio.h> @interface Volume : NSObject -(id)init; @end @implementation Volume -(id)init { self = [super init]; return self; } @end int main(vo
#import <Foundation/NSObject.h>
#import <stdio.h>
@interface Volume : NSObject
-(id)init;
@end
@implementation Volume
-(id)init
{
self = [super init];
return self;
}
@end
int main(void){
id o;
o = [Volume init];
}
谢谢。目标C中的类初始化分两个阶段进行:首先为实例分配内存,然后初始化该实例 所以你需要做:
o = [[Volume alloc] init];
您当前正在尝试将
init
作为Volume
上的类方法调用,而它是一个实例方法(在alloc
返回的新实例上调用)。使用alloc/init
[Volume init]
是无效消息。init
没有类方法
但是,[Volume alloc]
会创建一个Volume对象,然后可以在上调用init
[[Volume alloc]init]
是有效的,因为一旦对象被alloc
初始化,它就可以被init
序列化
alloc
在内存中保留对象存在的位置init
实际上占用了该内存并设置了一个可以使用的对象
使用新建
如果希望能够调用单个方法而不是[[Volume alloc]init]
,则可以调用[Volume new]
。虽然这是有效的,但并不经常使用
使用类对象初始值设定项
还可以实现类方法来创建新卷
+ (instancetype) volume{
return [[Volume alloc]init];
}
然后,您可以使用
Volume*vol=[Volume]代码>啊,我明白了,没有你说的类方法。所以我需要首先创建Volume对象。回答得很好。谢谢
o = [[Volume alloc] init];
+ (instancetype) volume{
return [[Volume alloc]init];
}