0

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

4

3 回答 3

1

init不是 ; 的指定初始化UIViewinitWithFrame:是。如果你覆盖initWithFrame:,它应该被调用,但init永远不会被调用UIView

于 2010-11-09T18:07:32.450 回答
1

你是对的alloc,它是一个类方法。UIViewsinitWithFrame:用于初始化,因此请考虑覆盖它。

于 2010-11-09T18:09:42.280 回答
0

苹果通常像这样构建他们的初始化覆盖:

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

尽管上述评论者是正确的。initwithFrame:是指定的初始化程序但是,您格式化问题时的覆盖将为您的麻烦提供编译器警告。

于 2011-09-20T01:25:48.273 回答