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:
函数(此时Frame
为CGRectZero
),然后调用init
函数 - 使用
initWithFrame:
函数创建实例
首先调用initWithFrame:
函数(此时Frame
为设定的值) - 使用自定义的初始化函数
首先调用initWithFrame:
函数(此时Frame
为CGRectZero
)
备注:
Swift 中使用let view = testView()
这种方式初始化时,首先调用override init(frame: CGRect)
函数(此时Frame
为CGRectZero
),同上述“使用init
函数创建实例”一样