今天一同事在看一代碼片段的時候問我,為什么此處需要同時對initWithCoder 和 initWithFrame 進行初始化,我想了想這應(yīng)該是為了同時兼顧從文件和從代碼解析的對象初始化吧,然而發(fā)現(xiàn)自己對這幾個概念還是不太清晰,特此筆記下。
- (instancetype)initWithCoder:(NSCoder *)aDecoder ;
- (void)awakeFromNib;
- (instancetype)initWithFrame:(CGRect)frame;
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;
一、initWithCoder & initWithFrame
-
initWithCoder:使用文件加載的對象調(diào)用(如從xib或stroyboard中創(chuàng)建) -
initWithFrame:使用代碼加載的對象調(diào)用(使用純代碼創(chuàng)建)
二、awakeFromNib & initWithCoder
-
initWithCoder: 只要對象是從文件解析來的,就會調(diào)用initWithCoder -
awakeFromNib: 從xib或者storyboard加載完畢就會調(diào)用
順序是: initWithCoder ===> awakeFromNib
三、initWithFrame & initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
- 此處是針對于UICollectionView 和 UITableView 自定義 Cell 的時候需要小注意下,UITableViewCell 是后者,而 UICollectionViewCell 是前者。