ios - 为什么两个初始化函数都被调用

标签 ios objective-c cocoa-touch

如果我有一个像这样设置的类来自定义 UIView。

@interface myView : UIView

- (id)init {
    self = [super init];
    if(self){
        [self foo];
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self foo];
    }
    return self;
}


-(void) foo{
   //Build UIView here 
}

不管我用不foo怎么被调用了两次

myView *aView = [[myView alloc]init]]; 

myView *aView = [[myView alloc]initWithFram:aFrame]; 

最佳答案

UIView init 调用 UIView initWithFrame:。由于您覆盖了两者,因此调用 init 方法会导致调用 initWithFrame: 方法:

换句话说:您的 init 调用 UIView initUIView init 调用 initWithFrame:。由于您重写了 initWithFrame:,您的 initWithFrame: 被调用,它又调用了 UIView initWithFrame:

由于您的 initWithFrame: 将始终被调用,因此解决方案是从您的 init 方法中删除对 foo 的调用。

关于ios - 为什么两个初始化函数都被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838928/

相关文章:

ios - iTunes Connect:带有特殊字符的公司名称

ios - 如何使用自动布局(约束)向 UIPageViewController 添加 subview ?

iOS 无法让 PDF 出现在 UIWebView 中

ios - -layoutAttributesForSupplementaryElementOfKind 没有 UICollectionViewLayoutAttributes 实例 :

objective-c - NSString 的 NSMutableDictonary 获取 null 值

ios - 如何在已解析的 JSON 中递归解析类别对象

ios - UITextView 不会将输入工具栏切换到自定义键盘

ios - 如何在 Swift 中使用 drawInRect?

objective-c - CoreData 关系故障?

ios - 触摸屏幕后是否可以让 UIView 开始跟踪触摸? (例如菜单)