美文网首页面试题IOSiOS
initWithCoder & initWithFram

initWithCoder & initWithFram

作者: 天空中的球 | 来源:发表于2016-05-27 00:09 被阅读1016次

今天一同事在看一代码片段的时候问我,为什么此处需要同时对initWithCoder 和 initWithFrame 进行初始化,我想了想这应该是为了同时兼顾从文件和从代码解析的对象初始化吧,然而发现自己对这几个概念还是不太清晰,特此笔记下。

- (instancetype)initWithCoder:(NSCoder *)aDecoder ;
- (void)awakeFromNib;
- (instancetype)initWithFrame:(CGRect)frame;
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;

一、initWithCoder & initWithFrame

  • initWithCoder:使用文件加载的对象调用(如从xib或stroyboard中创建)
  • initWithFrame:使用代码加载的对象调用(使用纯代码创建)

二、awakeFromNib & initWithCoder

  • initWithCoder: 只要对象是从文件解析来的,就会调用initWithCoder
  • awakeFromNib: 从xib或者storyboard加载完毕就会调用

顺序是: initWithCoder ===> awakeFromNib

三、initWithFrame & initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

  • 此处是针对于UICollectionView 和 UITableView 自定义 Cell 的时候需要小注意下,UITableViewCell 是后者,而 UICollectionViewCell 是前者。

相关文章

网友评论

  • 山林间迷雾能不能当障眼法的内容:博主意思是说 awakefromnib 和 initWithcoder 没有区别了? 就是一个先调用一个后调用吗??????
    天空中的球:@提督很忙啊赐教不敢,我们讨论点在于区别,我说的是作用的区别,不懂你说的没有什么区别是什么意思
    山林间迷雾能不能当障眼法的内容:@天空中的球 我打印了啊 发现先走initWithcoder 然后走awakeFormnib 就一个先一个后啊 没看出来 区别 请赐教
    天空中的球:@提督很忙啊 没有两者完全不是一码事啊,前者只是当IB加载后的补充方法,而 initWithCode时初始化方法啊,完全不同啊,区别可大啦,只是具体用途要看你自己,建议你直接打印下就能理解啦。

本文标题:initWithCoder & initWithFram

本文链接:https://www.haomeiwen.com/subject/gprxdttx.html