iOS 瘦身ViewController 分离tableViewDataSource

1:

#import <Foundation/Foundation.h>

typedef void(^configureCellBlock)(id cell, id item);//瘦身viewcontroller

@interface RRFriendTableViewDataSource : NSObject<UITableViewDataSource>

- (id)initWithItems:(NSArray *)items cellItentifier:(NSString *)cellIdentify configureCellBlock:(configureCellBlock)cellBlock;

- (id)itemAtIndexPath:(NSIndexPath
*)indexPath;

@end

2:

#import "RRFriendTableViewDataSource.h"

#import "RRFriendViewControllerCell.h"

@interface RRFriendTableViewDataSource ()

@property (nonatomic,strong) NSArray *items;

@property (nonatomic,copy)   NSString *cellIdentify;

@property (nonatomic,copy)   configureCellBlock cellBlock;

@end

@implementation RRFriendTableViewDataSource

- (id)init{

return nil;

}

- (id)initWithItems:(NSArray *)items cellItentifier:(NSString *)cellIdentify configureCellBlock:(configureCellBlock)cellBlock{

self=[super init];

if (self) {

self.items=items;

self.cellIdentify=cellIdentify;

self.cellBlock=cellBlock;

}

return self;

}

- (id)itemAtIndexPath:(NSIndexPath *)indexPath{

return self.items[(NSUInteger)indexPath.row];

}

#pragma mark - dataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

return 2;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

if (section==0) {

return 1;

}

return self.items.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

if (indexPath.section==0) {

UITableViewCell *cell=[self tableViewZero:tableView cellForRowAtIndexPath:indexPath];

return cell;

}

RRFriendViewControllerCell *cell=[tableView dequeueReusableCellWithIdentifier:self.cellIdentify];

if (cell==nil) {

cell=[[RRFriendViewControllerCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:self.cellIdentify];

}

id item=[self itemAtIndexPath:indexPath];

self.cellBlock(cell,item);

return cell;

}

- (UITableViewCell *)tableViewZero:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell *cell=[[UITableViewCell alloc]init];

UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0,0, [UIScreen mainScreen].bounds.size.width,44)];

label.textAlignment=NSTextAlignmentCenter;

[email protected]"xxxxxxxx";

[cell.contentView addSubview:label];

cell.backgroundColor=RGBACOLOR(235, 235, 235, 1);

return cell;

}

@end

3:用法

能够把ViewController里面的tableViewDataSource的三个方法给去掉,然后在载入tableview的时候写上,

NSArray *array=[NSArray arrayWithArray:self.cellInfoArray];

void (^configureCell)(RRFriendViewControllerCell*,RRFriendViewControllerModel *) = ^(RRFriendViewControllerCell* cell,RRFriendViewControllerModel *modelInfo) {

PAImageView *image=[[PAImageView alloc]initWithFrame:cell.myimage.bounds backgroundProgressColor:[UIColor lightGrayColor] progressColor:nil image:nil];

[cell.myimage addSubview:image];

[image setImageURL:modelInfo.image];

cell.mynickName=modelInfo.nickName;

cell.myID=modelInfo.ID;

cell.myrunDistance=modelInfo.rundistance;

cell.mydistance=modelInfo.distance;

};

self.arrayDataSource=[[RRFriendTableViewDataSource alloc]initWithItems:array cellItentifier:@"RRFriendViewControllerCell" configureCellBlock:configureCell];

self.myTableView.dataSource=self.arrayDataSource;

时间: 2024-10-15 18:56:39

iOS 瘦身ViewController 分离tableViewDataSource的相关文章

[转]基于clang插件的一种iOS包大小瘦身方案

转自:http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112856&idx=1&sn=b2c74c62a10b4c9a4e7538d1ad7eb739 iOS包瘦身,对于一般团队来说并不是优化的首要目标,但是对于一些安装包已经超限的团队来说非常关键.微信和阿里移动安全都分享过相关的内容,后者采用的是去除无用代码的思路,感兴趣的同学可以阅读: iOS瘦身之删除无用的mach-O文件 而本文则将这个思路发挥到了极致,欢迎

iOS:使用MVC模式帮ViewController瘦身

如何给UIViewController瘦身 随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码行数急剧增多,达到了2,3千行,甚至更多.这时如果想再添加一点功能或者修改现有逻辑变得让人无比头疼.如果你遇到了这类问题,那是时候停下来了,思考一下如何更好地组织代码,给VC瘦身.本文将会阐述如何结合MVC的思想帮你的VC瘦身同时提高复用和可扩展性. 一.开发中常见的现象和缺点 iOS中最常见的一种设计模式就是MVC,但在实际开发过程中,我们因为这样.那样的原因让单纯

iOS开发&gt;学无止境 - 使用MVC模式帮ViewController瘦身

随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码行数急剧增多,达到了2,3千行,甚至更多.这时如果想再添加一点功能或者修改现有逻辑变得让人无比头疼.如果你遇到了这类问题,那是时候停下来了,思考一下如何更好地组织代码,给VC瘦身.本文将会阐述如何结合MVC的思想帮你的VC瘦身同时提高复用和可扩展性. 一.开发中常见的现象和缺点 iOS中最常见的一种设计模式就是MVC,但在实际开发过程中,我们因为这样.那样的原因让单纯的ViewController变成了集Mod

iOS架构师之路:控制器(View Controller)瘦身设计

前言 古老的MVC架构是容易被iOS开发者理解和接受的设计模式,但是由于iOS开发的项目功能越来越负责庞大,项目代码也随之不断壮大,MVC的模糊定义导致我们的业务开发工程师很容易把大量的代码写到视图控制器中,行业中对这种控制器有个专业词汇Massive ViewControler(臃肿的视图控制器).代码臃肿导致可读性可维护性差,而且这种不清晰的设计还有许多的副作用,比如代码重用性差.作为架构师需要关注项目的代码质量.指导业务开发工程师写出高质量,高健壮性,高可用的代码也是很重要的工作.因此需要

iOS控制器瘦身-面向超类编程

点击查看作者简书地址 今天写这篇文章的目的,是提供一种思路,来帮助大家解决控制器非常臃肿的问题,对控制器瘦身. 如果手边有项目,不妨打开工程看一下你的控制器代码有多少行,是不是非常多?再看一下tableView的代理方法cellForRow和heightForRow的代码是不是也是非常多?里面夹杂着switch和大量if esle的判断逻辑的代码.后期维护看着这些if else是不是特别烦躁?特别是自己在维护前人写的代码,并且还没有注释 一团糟,是不是有更想骂人的冲动?别怕,这里给您提供一种解决

viewcontroller瘦身之一(转载)

在一个IOS项目中,viewcontroller通常是最大的文件,并且包含了许多不必要的代码,重用率是最低的. 我们可以尝试给viewcontroller瘦身,让他看起来不是那么的臃肿. 今天说到的是,UITableViewDataSource. UITableview可能是平时写项目中用到的最多的组件了,使用它要实现它的代理协议和数据源方法,每次都是那么些东西方法controller中,看起来不舒服,我们可以给他瘦身一下.比如这样做. 因为datasource基本上是围绕数组去做一些事,更针对

iOS安装包瘦身的那些事儿

在我们提交安装包到App Store的时候,如果安装包过大,有可能会收到类似如下内容的一封邮件: 收到这封邮件的时候,意味着安装包在App Store上下载的时候,有的设备下载的安装包大小会超过100M.对于超过100M的安装包,只能在WIFI环境下下载,不能直接通过4G网络进行下载. 在这里,我们提交App Store的安装包大小为67.6MB,在App Store上显示的下载大小和实际下载下来的大小,我们通过下表做一个对比: iPhone型号 系统 AppStore 显示大小 下载到设备大小

iOS 9 App 瘦身功能

App 瘦身简介 当前市场上存在大量的 iOS 设备,因此有多种屏幕尺寸和分辨率,要想保证一个 App 在多种屏幕下的展示效果需要大量的资源(比如 png.jpeg 以及二进制的 PDF).不幸的是,这导致用户需要下载一个巨大的程序包(之前的 iOS 版本强制用户下载全部 App 文件,包括他们在用 iPhone 时永远也不会用到的 iPad 适配图片).16G 的 iPhone 仍然有不少人在用(并且可能短时间内不会消失),所以你要缩小 App 体积从而可以快速下载并且保证用户有足够的空间.A

iOS可执行文件瘦身方法

缩减iOS安装包大小是很多中大型APP都要做的事,一般首先会对资源文件下手,压缩图片/音频,去除不必要的资源.这些资源优化做完后,我们还可以尝试对可执行文件进行瘦身,项目越大,可执行文件占用的体积越大,又因为AppStore会对可执行文件加密,导致可执行文件的压缩率低,压缩后可执行文件占整个APP安装包的体积比例大约有80%~90%,还是挺值得优化的.下面介绍一下在研究可执行文件过程中发现的可以优化的点.研究的过程使用了linkmap,linkmap的介绍跟生成可以参考另一篇文章—iOS可执行文