一拢肆、視圖
注意點:
1减响、純代碼創(chuàng)建試圖,重寫 initWithFrame: 方法就足夠善榛。
2辩蛋、XIB 加載視圖,重寫 awakeFromNib 方法就足夠移盆。
3悼院、重寫 init 方法行不行?行咒循,但是前提是不要重寫以上提到的兩個方法据途,否則錯誤?绞愚。
參考摘抄自:iOS開發(fā)中、如何選擇重寫初始化方法?
二颖医、Cell
特指 iOS 中的 UITableViewCell 與 UICollectionViewCell位衩,還有 UITableViewHeaderFooterView 也可歸為此類,畢竟都有重用機制熔萧。比如 UITableViewCell 的基類提供的接口如下:
//
// HGCell.h
// BaseClass
//
// Created by hong.zhu on 2016/9/3
// Copyright ? 2016 CoderHG. All rights reserved.
//
#import <UIKit/UIKit.h>
/// 內(nèi)部已考慮重用機制
@interface HGCell : UITableViewCell
/**
返回一個Cell實例, 通常用于純代碼編寫的子類
@param tableView 當(dāng)前表視圖視圖
@return 返回Cell
*/
+ (instancetype)cellWithTableView:(UITableView*)tableView;
/**
返回一個Cell實例, 通常用于XIB
@param tableView 當(dāng)前表視圖視圖
@return 返回Cell
*/
+ (instancetype)xibCellWithTableView:(UITableView*)tableView;
/**
返回一個空白Cell, 主要用于占位Cell
@param tableView 當(dāng)前表視圖視圖
@return 返回Cell
*/
+ (id)blankCell:(UITableView*)tableView;
@end
比如 UICollectionViewCell 的基類提供的接口如下:
//
// HGCVCell.h
// BaseClass
//
// Created by hong.zhu on 2016/9/3
// Copyright ? 2016 CoderHG. All rights reserved.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
/// 內(nèi)部已考慮重用機制
@interface HGCVCell : UICollectionViewCell
/**
返回一個Cell實例, 通常用于純代碼編寫的子類
@param collectionView 當(dāng)前表視圖視圖
@return 返回Cell
@note 內(nèi)部已做異常處理, 可以不用提前注冊 (在特殊情況下, 提前注冊依然會 crash)
*/
+ (instancetype)cellWithCollectionView:(UICollectionView*)collectionView indexPath:(NSIndexPath*)indexPath;
@end
NS_ASSUME_NONNULL_END
在項目中不是使用這樣的基類行不行糖驴?肯定行,一般項目中 95% 的控制器中都需要使用到 Cell佛致,如果每個地方將 三行代碼封裝到減少成一行代碼贮缕, 何樂而不為之。
參考摘抄自: HGBaseClass
三俺榆、控制器
關(guān)于控制器就有點厲害了感昼,在使用上沒有視圖 (View || Cell) 那么復(fù)雜,所以控制器的封裝在通用性方面往往是有針對性的罐脊。不管如何應(yīng)該都如下所示:
基類設(shè)計*針對其項目族
參考摘抄自: HGBaseDesign
四定嗓、小節(jié)
基類是什么鬼? 有毛作用萍桌?
基類需謹(jǐn)慎宵溅、規(guī)范看基類。 -- 魯迅
圖片發(fā)自簡書App