2

我正在尝试在程序的实现部分下初始化一个对象,因为我打算将同一个对象用于多个方法。我尝试这样做时遇到错误,我只是想知道为什么。以下是一些示例:

@implementation Fraction {
    NSString *test = [[NSString alloc] init];
}

或者

@implementation Fraction {
    int x = 0;
}

尽管如果您不初始化变量,它们可以正常工作而不会出现任何错误或警告。我确定这就是代码的设计方式,但我只是好奇为什么。提前感谢您的回答!

4

3 回答 3

7

的花括号部分@implementation仅用于声明实例变量。您不能初始化它们或将任何其他代码放在那里。

初始化实例变量的正确位置是在init方法中:

@implementaiton Fraction {
    NSString *test;
    int x;
}

- (id)init {
    if ((self = [super init])) {
        test = @"";
        x = 0;
    }

    return self;
}
于 2012-11-23T04:04:26.057 回答
2

通过@implementation用大括号括起来,您是在声明 iVar,而不是声明常量。即使您没有尝试声明一个常量,-init如果您希望变量保持“初始值”,您也需要将初始化移动到一个特殊的方法中。如果您试图声明一个常量,则需要在@implementation块之外完成。

于 2012-11-23T04:04:18.737 回答
0

@implementation部分中,您不能初始化任何变量,只能声明它们。对于其他的东西使用- (id) init方法,因为它是在分配后逻辑调用的,像这样:[[CustomObjectClass alloc] init];另外,要声明私有变量,建议在你的 .m 文件中使用类扩展,如下所示:@interface CustomClassName()

于 2012-11-23T04:21:33.347 回答