2009-04-08 66 views
0

在初始化類方法期間是否可以爲實例變量賦值?在初始化中設置實例變量

我聲明瞭一些數組,然後創建一個數組數組,然後將其分配給self.months,它是一個實例變量。爲什麼這不起作用,我該如何做到這一點?

 +(void)initialize 
{ 
    // ..... 
     NSArray *matrix = [[NSArray alloc] initWithObjects:jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec, nil ]; 

    self.months = matrix; 
    [matrix release] 

}

回答

3

由於您沒有對實例的引用,因此無法在類方法中設置實例變量。一個類上的initialize方法被稱爲該類第一次接收到任何消息,並且打算在處理任何實際消息之前執行類的全局設置。例如,設置初始用戶默認值通常在應用程序的控制器或委託類的initialize方法中完成。

要設置實例變量,您應該在對象的指定初始值設定項中執行此操作(默認爲init,但某些對象如果需要參數則更改指定的初始值設定項)。例如:

- (id)init { 
    if((self = [super init])) { 
    myInstanceVariable = (int *)malloc(50 * sizeof(int)); 
    } 
} 

- (void)dealloc { 
    free(myInstanceVariable); 
    [super dealloc]; 
} 

在這裏,你居然要self一個參考,你可以使用,因爲對象的不同實例已被分配。

3

我覺得你無所適從initialize一樣。這是初始化類本身。沒有實例,因此沒有實例變量。要初始化實例,請覆蓋init方法。