init 和 initWithFrame 区别
Posted LLLLLuke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了init 和 initWithFrame 区别相关的知识,希望对你有一定的参考价值。
当我们去自定义一些控件时 可以重写:
- (instancetype)init;
也可以去重写:
(instancetype)initWithFrame:(CGRect)frame
下面关于这两个的差异:
#import "BFView.h" @implementation BFView - (instancetype)init{ self = [super init]; NSLog(@"%@",NSStringFromCGRect(self.frame)); return self; } - (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; NSLog(@"%@",NSStringFromCGRect(self.frame)); return self; }
#import "ViewController.h" #import "BFView.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; BFView *bfv = [[BFView alloc]init]; BFView *bfv2 = [[BFView alloc]initWithFrame:CGRectMake(3, 4, 5, 6)]; } @end
综上所述:
实现init这个方法咱们会先去调用initWithFarme这个方法 并且frame的所有值都为0;
实现iniwithFrame 这个方法 在初始化的时候 就已经把frame设置好了 并且不会去调用init这个方法
以上是关于init 和 initWithFrame 区别的主要内容,如果未能解决你的问题,请参考以下文章
init&initWithFrame&initWithCoder
UIView:layoutSubviews 与 initWithFrame
iOS:UIView子类init会调用[super init]然后调用超类中的方法,为啥会调用[subclass initWithFrame:xx]?