iOS | 多态的实际运用
一句话概括多态:子类重写父类的方法,父类指针指向子类。
或者许你对多态的概念比较模糊,但是很可能你已经在不经意间运用了多态。比方说:
有一个tableView,它有多种cell,cell的UI差异较大,但是它们的model类型又都是一样的。
因为这几种cell都具备相同类型的model,那么你一定会先建一个基类cell,如:
@interface BaseCell : UITableViewCell@property (nonatomic, strong) Model *model;@end
而后各种cell继承自这个基类cell:
红绿蓝三种子类cell
@interface RedCell : BaseCell@end
子类cell重写BaseCell的setModel:
方法:
// 重写父类的setModel:方法- (void)setModel:(Model *)model { // 调用父类的setModel:方法 super.model = model; // do something...}
在controller中:
// cell复用ID array- (NSArray *)cellReuseIdArray { if (!_cellReuseIdArray) { _cellReuseIdArray = @[RedCellReuseID, GreenCellReuseID, BlueCellReuseID]; } return _cellReuseIdArray;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellResueID = nil; cellResueID = self.cellReuseIdArray[indexPath.section]; // 父类 BaseCell *cell = [tableView dequeueReusableCellWithIdentifier:cellResueID]; // 创立不同的子类 if (!cell) { switch (indexPath.section) { case 0: // 红 { // 父类指针指向子类 cell = [[RedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID]; } break; case 1: // 绿 { // 父类指针指向子类 cell = [[GreenCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID]; } break; case 2: // 蓝 { // 父类指针指向子类 cell = [[BlueCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID]; } break; } } // 这里会调用各个子类的setModel:方法 cell.model = self.dataArray[indexPath.row]; return cell;}
不出意外,相似于上面的代码我们都写过,其实这里就运用到了类的多态性。
多态的三个条件:
- 继承:各种cell继承自BaseCell
- 重写:子类cell重写BaseCell的
setModel:
方法 - 指向:父类cell指针指向子类cell
以上,就是多态在实际开发中的表现。
正当运用类的多态性可以降低代码的耦合度让代码更易扩展。
把这些概念性的东西跟日常实际开发相结合,你就能秒懂且难忘。
已是最前 目录 下一篇
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS | 多态的实际运用
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS | 多态的实际运用