在目标c中,是否可以为类变量设置默认值?

时间:2010-07-19 11:47:24

标签: objective-c default-value class-variables

我已经在stackoverflow和google中搜索了ans,但是没有得到我需要的东西。

我在寻找什么:

有没有办法为类的类属性设置默认值? 就像我们在Java中可以做的那样,在类的构造函数中,例如.-

MyClass(int a, String str){//constructor
  this.a = a;
  this.str = str;

  // i am loking for similar way in obj-C as follows 
  this.x = a*5;
  this.y = 'nothing';
}

我为什么要寻找:

我有一个大约有15个属性的课程。当我实例化类时,我必须使用一些默认值设置所有这些变量/属性。所以这使得我的代码变得繁重而复杂。如果我可以在该类中为这些实例变量设置一些默认值,那么必须减少此代码复杂性/冗余。

我需要你的帮助。

提前感谢您的帮助。

-Sadat

3 个答案:

答案 0 :(得分:4)

如果您不想指定参数,

- (MyClass *)init {
    if (self = [super init]) {
        a = 4;
        str = @"test";
    }
    return self;
}

然后当你MyClass *instance = [[MyClass alloc] init]时,它会设置ivars的默认值。

但我不明白为什么你发布了带参数的构造函数,但你不想使用它们。

答案 1 :(得分:3)

编写 init,它正在执行完全初始化的所有工作。

然后根据需要编写尽可能多的具有不同参数集的启动器(但请考虑一下:你真的需要这个那个一个吗?)。不,不要让他们做这个工作。让他们填写所有默认值(您没有提供给消息消息处理implementatino)并将其全部交给第一个。

第一个启动器称为指定启动器。 请务必不要错过Multiple Initializers and the Designated Initializer. 从不忽略指定的人!

问候

答案 2 :(得分:1)

在班级界面中:

@interface YourClass : NSObject {
    NSInteger a;
    NSInteger x;
    NSString  *str;
    NSString  *y;
}

- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString;

@end

然后,在实施中:

- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString {
    if (self = [super init]) {
        a = someInteger;
        str = [someString copy];

        x = a * 5;
        y = [@"nothing" retain];
    }

    return self;
}

NSIntegerintlong的typedef,具体取决于架构。)