注意三点:
1、两个方法都是异步执行的
2、使用init初始化UIView两个方法都不会调用,所以在init中最好是初始化数据,而在上述两个方法中初始化视图
3、最好使用drawRect初始化视图,layoutSubviews在继承UIScrollView或UITableView等情况下,会调用两次
MyView.h
@interface MyView : UIView @end
MyView.m
#import "MyView.h" @implementation MyView - (instancetype)init { NSLog(@"%@", NSStringFromSelector(_cmd)); return [super init]; } - (instancetype)initWithFrame:(CGRect)frame { NSLog(@"%@", NSStringFromSelector(_cmd)); return [super initWithFrame:frame]; } - (void)drawRect:(CGRect)rect { NSLog(@"%@", NSStringFromSelector(_cmd)); } - (void)layoutSubviews { NSLog(@"%@", NSStringFromSelector(_cmd)); } @end
打印结果是:
2015-06-09 19:45:00.919 ViewDemo[5621:283667] initWithFrame: 2015-06-09 19:45:00.924 ViewDemo[5621:283667] layoutSubviews 2015-06-09 19:45:00.924 ViewDemo[5621:283667] drawRect:
如果把 MyView.h换成
@interface MyView : UIScrollView @end
打印结果是:
2015-06-09 19:50:50.499 ViewDemo[5642:289117] initWithFrame: 2015-06-09 19:50:50.513 ViewDemo[5642:289117] layoutSubviews 2015-06-09 19:50:50.513 ViewDemo[5642:289117] layoutSubviews 2015-06-09 19:50:50.513 ViewDemo[5642:289117] drawRect:
可以看出layoutSubviews会打印两次,再MyView继承UILabel、UIButton、UITableView和UICollectionView等等情况下,都会调用两次。
时间: 2024-11-04 13:05:29