知识点(一):关于重写构造方法的三种方式的思考:
- (instancetype)init{ self = [super init]; if (self) { NSLog(@"%s",__func__); } return self;}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { NSLog(@"%s",__func__); } return self;}/** * 代码为什么要写在initWithStyle 方法中 * * 当代码是提供给别人使用的时候,一定要充分考虑别人会怎么使用 * 要保证自己的代码,无论别人怎么去调用,都能调用到 */- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { NSLog(@"%s",__func__); } return self;}
1.当调用的时候,假设对象是p,那么[[p alloc]init]的时候
调用顺序和结果为:
2017-05-03 17:30:07.737 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:30:07.737 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]2017-05-03 17:30:07.738 11-微博[2376:644294] -[HMWeiboCell init]2017-05-03 17:30:08.110 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:30:08.111 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]2017-05-03 17:30:08.113 11-微博[2376:644294] -[HMWeiboCell init]2017-05-03 17:30:08.116 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:30:08.117 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]2017-05-03 17:30:08.118 11-微博[2376:644294] -[HMWeiboCell init]
结果显示为三种方法都会被调用
2.当[[p alloc]initWithFrame:CGRectZero];的时候
调用顺序和结果为:
2017-05-03 17:37:26.351 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:37:26.351 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]2017-05-03 17:37:26.409 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:37:26.409 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]2017-05-03 17:37:26.410 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:37:26.411 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]
3.当[[p alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseId];的时候:
调用顺序和结果为:
2017-05-03 17:38:42.427 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:38:42.463 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]2017-05-03 17:38:42.464 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]
知识点(二)cell中会经常碰到[self.contentView addSubview:nameLabel]和[self addSubview:nameLabel]
一般我们向cell中添加子视图,有两种方式
[cell addSubview:] [cell.contentView addSubview:]
区别在于进行cell编辑时,比如cell内容向左移或者右移时,第一种方式子视图不会移动,第二可以,所以这种情况一般使用第二种方式。
还有在设置backgroundColor时,使用cell设置时左移或者右移颜色是不会变的,而用cell.contentCell设置时,移动后的空白会显示cell的默认颜色,这种情况视实际情况选择。
其实这两种方式在大多数情况是一样,不用纠结。
但一般情况下会添加到contentView上,可以这样理解:cell本身是个view,在cell上有一层透明的contentView