![](/img/trans.png)
[英]Why do you not need to [super alloc] in your subclass init method implementation?
[英]alloc and init in a subclass
我已經繼承了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方法。 但是對象是創建的,但是我的init和alloc沒有被調用。 難道這不是為了確保正確的初始化嗎?
另外,構建會產生警告,提示UIView可能不會響應“ alloc”-它不是必須從NSObject繼承它嗎?或者如何正確創建UIView?
我在上面的目標是我的子視圖將能夠在IB創建它之后進行自定義初始化。
init
不是UIView
的指定初始值設定項; initWithFrame:
是。 如果重寫initWithFrame:
則應調用它,但UIView
永遠不會調用init
。
你說得對, alloc
,這是一個類的方法。 UIViews使用initWithFrame:
進行初始化,因此請研究覆蓋它。
Apple通常構建他們的init覆蓋,如下所示:
-(id)init{
self = [super init];
if (self) {
//Custom Initialization goes here
}
}
雖然以上評論者都是正確的。 initwithFrame:
是指定的初始值設定項。但是,格式化問題時的覆蓋將使您收到編譯器警告您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.