init&initWithFrame&initWithCoder
Posted 小眼奇遇记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了init&initWithFrame&initWithCoder相关的知识,希望对你有一定的参考价值。
//当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame { if (self =[superinitWithFrame:frame]) { // 初始化代码 } return self; } 用于视图加载nib文件,从nib中加载对象实例时,使用 initWithCoder初始化这些实例对象 - (id)initWithCoder:(NSCoder*)coder { if (self =[superinitWithcoder:coder]) { // 初始化代码 } return self; }
而在init,会先调用initwithframe方法来初始化视图内容
// init内部首先会调用这个方法,所以initWithFrame打印在前 - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSLog(@"initWithFrame"); } return self; } // initWithFrame方法调用完毕后才执行这个方法体,所以init打印在后 - (instancetype)init { // 这个方法内部调用,initWithFrame方法 self = [super init]; if (self) { NSLog(@"init"); } return self; }
以上是关于init&initWithFrame&initWithCoder的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C init/initWithFrame调用机制
iOS:UIView子类init会调用[super init]然后调用超类中的方法,为啥会调用[subclass initWithFrame:xx]?
UIView:layoutSubviews 与 initWithFrame