我已经将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创建后进行自定义初始化。
答案 0 :(得分:1)
init
不是UIView
的指定初始值设定项; initWithFrame:
是。如果您覆盖initWithFrame:
,则应该调用它,但init
永远不会调用UIView
。
答案 1 :(得分:1)
你对alloc
是正确的,这是一种类方法。 UIViews使用initWithFrame:
进行初始化,所以请研究一下。
答案 2 :(得分:0)
Apple通常建立这样的init覆盖:
-(id)init{
self = [super init];
if (self) {
//Custom Initialization goes here
}
}
虽然上述评论者是正确的。 initwithFrame:
是指定的初始化程序
但是,格式化问题时的覆盖将为您提供编译器警告。