子类中的alloc和init

时间:2010-11-09 17:29:20

标签: objective-c init alloc

我已经将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创建后进行自定义初始化。

3 个答案:

答案 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:是指定的初始化程序 但是,格式化问题时的覆盖将为您提供编译器警告。