iOSが開発したUIViewとUIViewControllerのライフサイクルのまとめ

3506 ワード

iOS開発では、Viewを作成する一般的な2つの方法があります.1つは純粋なコードで、1つはXIBを借りています.ViewControllerを作成するには、純粋なコードとStoryBoardを使用する2つの方法が一般的です.交流を通じて私は多くの子供靴がこれらの概念に対してすべてあいまいであることを発見して、そこで実験を通じて1篇のブログを書いて参考にします.

Viewを書き換えるには、次の方法があります。

@implementation YFView

-(instancetype)init{
    
    self = [super init];
    
    NSLog(@"%s", __func__);
    
    return self;
}

-(instancetype)initWithFrame:(CGRect)frame{
    
    self = [super initWithFrame:(CGRect)frame];
    
    NSLog(@"%s", __func__);
    
    return self;
    
}

-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    
    self = [super initWithCoder:aDecoder];
    
    NSLog(@"%s", __func__);
    
    return self;
    
}

-(void)awakeFromNib{
    
    [super awakeFromNib];
    
    NSLog(@"%s", __func__);
}


-(void)layoutSubviews{
    
    NSLog(@"%s", __func__);
    
}

@end

ViewControllerを書き換えるには、次の方法があります。

@implementation YFViewController

-(void)loadView{
    
    NSLog(@"%s", __func__);
    
    [super loadView];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    NSLog(@"%s", __func__);
    
    self.view.backgroundColor = [UIColor redColor];
}


-(void)viewDidAppear:(BOOL)animated{
    
    NSLog(@"%s", __func__);
    
    [super viewDidAppear:animated];
    
    
}

-(instancetype)init{
    
    self = [super init];
    
    NSLog(@"%s", __func__);
    
    return self;
}

-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    
    self = [super initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil];
    
    NSLog(@"%s", __func__);
    
    return self;
    
}

-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    
    self = [super initWithCoder:aDecoder];
    
    NSLog(@"%s", __func__);
    
    return self;
    
}

-(void)awakeFromNib{
    
    NSLog(@"%s", __func__);
    
    [super awakeFromNib];
}

@end

結論まとめ

  • コントローラが直接コードによって作成され、呼び出し方法が[[YFViewController alloc]init]VCを作成するライフサイクルが
  • である場合.
    -[YFViewController initWithNibName:bundle:]
    -[YFViewController init]
    -[YFViewController loadView]
    -[YFViewController viewDidLoad]
    -[YFViewController viewDidAppear:]
    
  • コントローラの作成時にXIBがチェックされている場合、呼び出し方法は[[YFViewコントローラalloc]init]VCの作成時のライフサイクルは
  • です.
    -[YFViewController initWithNibName:bundle:] 
    -[YFViewController init]
    -[YFViewController loadView]
    -[YFViewController viewDidLoad]
    -[YFViewController viewDidAppear:]
    
  • SBを介してコントローラを作成する場合、VCのライフサイクルは
  • です.
    -[ViewController initWithCoder:]
    -[ViewController awakeFromNib]
    -[ViewController loadView]
    -[ViewController viewDidLoad]
    -[ViewController viewDidAppear:]
    
  • 純粋なコードによってUIViewが作成された場合、YFView*yfView=[[YFView alloc]init];では、そのライフサイクルは
  • です.
    -[YFView initWithFrame:]
    -[YFView init]
    -[YFView layoutSubviews]
    
  • 純粋なコードがUIViewを作成する場合、YFView*yfView=[[YFView alloc]initWithFrame:[UIscreen mainScreen].bounds];では、そのライフサイクルは
  • です.
    -[YFView initWithFrame:]
    -[YFView layoutSubviews]
    
  • XIBによってUIViewが作成された場合、NSArray*array=[[NSBundle mainBundle]loadNibName:@"YFView"owner:nil options:nil];[array lastObject];では、そのライフサイクルは
  • です.
    -[YFView initWithCoder:]
    -[YFView awakeFromNib]
    -[YFView layoutSubviews]