【问题标题】:Objective C class initialization errorsObjective C 类初始化错误
【发布时间】:2009-06-30 12:19:10
【问题描述】:

我有以下目标 C 类。它用于存储电影风格设置、标题场地 ID 等电影的信息。每当我尝试创建此类的对象时:

Film film = [[Film alloc] init];

我收到以下错误:可变大小的对象可能未初始化,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

【问题讨论】:

  • 抱歉格式错误,这里还不明白如何创建代码块

标签: objective-c variables class object


【解决方案1】:

您需要保存对对象的引用的变量是引用类型。您可以使用星号来执行此操作 - 见下文:

Film *film = [[Film alloc] init];

来自 Java,我经常将上述内容视为:

Film* film = [[Film alloc] init];

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

【讨论】:

  • 谢谢你的天才。指针我还没有完全看懂,内存管理在c#里给你处理好了。
  • @teabot:来自 C/C++ 世界,我将其称为指针而不是引用。即:“电影是指向电影类实例的指针”。引用特定于 C++,并使用“&”代替“*”。在 Objective-C 中,由于所有对象变量都必须是指针,因此通常会去掉“指针”一词:“film 是 Film 类的实例”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多