iOS init~初始化流程

UIView有多个init方法

  • - (instancetype)init
  • - (instancetype)initWithFrame:(CGRect)frame
  • - (instancetype)initWithCoder:(NSCoder *)aDecoder

新建一个类View

#import "View.h"

@implementation View

- (instancetype)init {
    self = [super init];
    if (self) {
        NSLog(@"调用init");
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        NSLog(@"调用initWithFrame");
        NSString *str = NSStringFromCGRect(frame);
        NSLog(@"frame = %@", str);
    }
    return self;
}

- (instancetype)initWithSth:(NSString *)sth {
    self = [super init];
    if (self) {
        NSLog(@"调用initWithSth");
    }
    return self;
}

@end

  • 使用init函数创建实例
    首先调用initWithFrame:函数(此时FrameCGRectZero),然后调用init函数
  • 使用initWithFrame:函数创建实例
    首先调用initWithFrame:函数(此时Frame为设定的值)
  • 使用自定义的初始化函数
    首先调用initWithFrame:函数(此时FrameCGRectZero)

备注:
Swift 中使用let view = testView()这种方式初始化时,首先调用override init(frame: CGRect)函数(此时FrameCGRectZero),同上述“使用init函数创建实例”一样

你可能感兴趣的:(iOS init~初始化流程)