Objective C类初始化错误

2 variables class object objective-c

我有以下目标C类.这是为了在电影风格设置,标题场地ID等电影上存储信息.每当我尝试创建这个类的对象时:

Film film = [[Film alloc] init];
Run Code Online (Sandbox Code Playgroud)

我得到以下错误:variable-sizedobject可能无法初始化,静态分配Objective-C类"Film"的实例,静态分配Objective-C类"Film"的实例.

我对Objective C很新,可能仍然处于C#思维模式中,有谁能告诉我我做错了什么?

谢谢迈克尔

码:

// Film.m
#import "Film.h"
static NSUInteger currentID = -1;

@implementation Film

@synthesize filmID, title, venueID;

-(id)init {

    self = [super init];

    if(self != nil) {
        if (currentID == -1)
        {
            currentID = 1;
        }
        filmID = currentID;
        currentID++;
        title = [[NSString alloc] init];
        venueID = 0;
    }

    return self;
}

-(void)dealloc {

    [title release];
    [super dealloc];
}

+(NSUInteger)getCurrentID {
    return currentID;
}

+(void)setCurrentID:(NSUInteger)value {
    if (currentID != value) {
        currentID = value;
    }
}

@end
Run Code Online (Sandbox Code Playgroud)

// Film.h
#import <Foundation/Foundation.h>


@interface Film : NSObject {
    NSUInteger filmID;
    NSString *title;
    NSUInteger venueID;
}

+ (NSUInteger)getCurrentID;
+ (void)setCurrentID:(NSUInteger)value;

@property (nonatomic) NSUInteger filmID;
@property (nonatomic, copy) NSString *title;
@property (nonatomic) NSUInteger venueID;

//Initializers
-(id)init;

@end
Run Code Online (Sandbox Code Playgroud)

tea*_*bot 5

您需要保存对象引用的变量为引用类型.您可以使用星号执行此操作 - 请参阅以下内容:

Film *film = [[Film alloc] init];
Run Code Online (Sandbox Code Playgroud)

来自Java我经常把上面的想法看作:

Film* film = [[Film alloc] init];
Run Code Online (Sandbox Code Playgroud)

我倾向于将'reference'标记与类型相关联.但是,希望更精通C/C++/ObjC的人会告诉我为什么这是错误的,以及在这种情况下实际调用的是"星号".

  • @teabot:来自C/C++世界,我会称之为指针而不是引用.即:"电影是指向电影类实例的指针".引用特定于C++,并使用'&'代替'*'.在Objective-C中,由于所有对象变量都必须是指针,因此通常会删除"指针"一词:"电影是电影类的一个实例". (3认同)