基类设计概述

一、视图

注意点:
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 

/// 内部已考虑重用机制
@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 

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) 那么复杂,所以控制器的封装在通用性方面往往是有针对性的。不管如何应该都如下所示:

基类设计概述_第1张图片
基类设计*针对其项目族

参考摘抄自: HGBaseDesign

四、小节

基类是什么鬼? 有毛作用?

基类需谨慎、规范看基类。 -- 鲁迅

基类设计概述_第2张图片
图片发自App

你可能感兴趣的:(基类设计概述)