我有以下目标C类。这是为了在电影风格设置,标题场地ID等电影上存储信息。每当我尝试创建这个类的对象时:
Film film = [[Film alloc] init];
我得到以下错误: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
// 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
答案 0 :(得分:5)
您需要保存对象引用的变量为引用类型。您可以使用星号执行此操作 - 请参阅下文:
Film *film = [[Film alloc] init];
来自Java我经常将上述视为:
Film* film = [[Film alloc] init];
我倾向于将'reference'标记与类型相关联。但希望有更多精通C / C ++ / ObjC的人会告诉我为什么这是错的,以及在这种情况下实际调用的是“星号”。