2010-11-09 45 views
0

我已經subclassed UIView並提供我自己的drawRect,它工作正常。不過,我添加了這些方法,我的子類:分配和初始化在一個子類

- (id) alloc 
{ 
    NSLog(@"Alloc"); 
    return [super alloc]; 
} 

- (id) init 
{ 
    NSLog(@"Init"); 
    if (self = [super init]) 
     flashWhite = true; 
    return self; 
} 

我以爲只要創建一個子類的對象(通過Interface Builder的情況)時,alloc和初始化方法會被調用。然而,對象是創建的,但我的init和alloc不會被調用。這不應該發生,以確保正確的初始化?

此外,建設產生一個警告,UIView可能不會響應'分配' - 它不必從NSObject繼承,或者如何正確創建一個UIView?

我在上面的目標是我的子類視圖能夠在IB創建後自定義初始化。

+0

我應該讓alloc成爲CLASS方法 - 'alloc alloc'ratherthan' - alloc – 2010-11-09 17:34:47

+0

而不是' - alloc' - 所以當我這樣做時,我的子類的alloc就會被調用。但是我仍然對init感到困惑。 – 2010-11-09 17:37:07

回答

1

init不是UIView的指定初始值設定項; initWithFrame:是。如果您覆蓋initWithFrame:,它應該被調用,但init永遠不會被UIView調用。

+0

Aaaarggh !!!感謝你們兩位。 – 2010-11-09 22:31:02

1

你說得對alloc,這是一種類方法。 UIView使用initWithFrame:進行初始化,所以請重新考慮。

0

蘋果通常建立自己的init覆蓋這樣的:

-(id)init{ 
    self = [super init]; 
    if (self) { 
      //Custom Initialization goes here 
    } 
} 

雖然上面提意見是正確的。 initwithFrame:是指定的初始化程序 但是,當您格式化您的問題時,覆蓋將爲您帶來編譯器警告,以解決您的問題。