美文网首页iOS 艺海拾贝程序员iOS 开发
一道关于UIView 的init 方法和initWithFram

一道关于UIView 的init 方法和initWithFram

作者: lsb332 | 来源:发表于2016-03-31 15:57 被阅读1274次

    再说之前我先看一个问题 假如有一个View 代码如下:

    @implementation MyView
    - (id)init {
     self = [super init];
      if (self) {
        NSLog(@" init");
       }
        return self;
    }
    - (id)initWithFrame:(CGRect)frame {
       self = [super initWithFrame:frame];
       if (self) {
        NSLog(@"initWithFrame");
       }
    return self;
    }
    

    如果我们在实例化这个view 的有时候 如果我们用:
    MyView *myView =[ [MyView alloc] init];
    结果会输出什么?
    再如果我们这样用
    MyView *myView =[ [MyView alloc] initWithFrame:CGRectZero];
    结果又会输出什么?
    我们先看第一种输出结果:

    1.1.png

    第二种输出结果:

    1.2.png
    为什么会这样子呢?它们二者又有什么关系呢?
    我们知道 Objective-C 有指定初始化方法(designated initializer)和间接(secondary initializer)初始化方法的观念。 designated 初始化方法是提供所有的参数,secondary 初始化方法是一个或多个,并且提供一个或者更多的默认参数来调用 designated 初始化的初始化方法。如果你对这两个方法不熟悉( 这本书里说的很详细也很好,在这里我就不复制了,如果你有兴趣了解更多那就下载下来好好看看吧) 请参考这篇文章 https://github.com/oa414/objc-zen-book-cn/#designated-initializer 这里面有详细说明。请仔细阅读理解,如果认真看完了那么你点开UIView.h 文件看看你可以看到:
    - (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
    再回头看看上面的问题你是不是理解了呢?

    相关文章

      网友评论

        本文标题:一道关于UIView 的init 方法和initWithFram

        本文链接:https://www.haomeiwen.com/subject/dgbelttx.html