基类设计概述
2019-10-07 本文已影响0人
CoderHG
一、视图
注意点:
1、纯代码创建试图,重写 initWithFrame: 方法就足够。
2、XIB 加载视图,重写 awakeFromNib 方法就足够。
3、重写 init 方法行不行?行,但是前提是不要重写以上提到的两个方法,否则错误❌。
参考摘抄自:iOS开发中、如何选择重写初始化方法?
二、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>
/// 内部已考虑重用机制
@interface HGCell : UITableViewCell
/**
返回一个Cell实例, 通常用于纯代码编写的子类
@param tableView 当前表视图视图
@return 返回Cell
*/
+ (instancetype)cellWithTableView:(UITableView*)tableView;
/**
返回一个Cell实例, 通常用于XIB
@param tableView 当前表视图视图
@return 返回Cell
*/
+ (instancetype)xibCellWithTableView:(UITableView*)tableView;
/**
返回一个空白Cell, 主要用于占位Cell
@param tableView 当前表视图视图
@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
/// 内部已考虑重用机制
@interface HGCVCell : UICollectionViewCell
/**
返回一个Cell实例, 通常用于纯代码编写的子类
@param collectionView 当前表视图视图
@return 返回Cell
@note 内部已做异常处理, 可以不用提前注册 (在特殊情况下, 提前注册依然会 crash)
*/
+ (instancetype)cellWithCollectionView:(UICollectionView*)collectionView indexPath:(NSIndexPath*)indexPath;
@end
NS_ASSUME_NONNULL_END
在项目中不是使用这样的基类行不行?肯定行,一般项目中 95% 的控制器中都需要使用到 Cell,如果每个地方将 三行代码封装到减少成一行代码, 何乐而不为之。
参考摘抄自: HGBaseClass
三、控制器
关于控制器就有点厉害了,在使用上没有视图 (View || Cell) 那么复杂,所以控制器的封装在通用性方面往往是有针对性的。不管如何应该都如下所示:
参考摘抄自: HGBaseDesign
四、小节
基类是什么鬼? 有毛作用?
基类设计概述基类需谨慎、规范看基类。 -- 鲁迅