美文网首页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