objc.io #1 Lighter View Controller

分離tableView的datasource

將datasource單獨(dú)分離出來,為view controller減輕代碼量

  • 方式一:通過block處理cell
  • 方式二:通過delegate處理cell
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    @protocol PhotoDelegate;
    typedef void (^PhotoViewCellConfigureBlock)(id cell,id item) ;

    @interface PhotoDataSource : NSObject <UITableViewDataSource>

    @property (nonatomic, weak) id<PhotoDelegate> delegate;


    - (instancetype)initWithItem:(id)item
              cellIdentifier:(NSString *)identifier
        configurePhotoCellBlock:(PhotoViewCellConfigureBlock)configureBlock;

    @end


    @protocol PhotoDelegate <NSObject>

    @required
    - (void)tableViewCell:(UITableViewCell *)cell item:(id)item;
    @end

    #import "PhotoDataSource.h"

    @interface PhotoDataSource ()
    @property (nonatomic, strong) NSArray *items;
    @property (nonatomic, strong) NSString *identifier;
    @property (nonatomic, strong) PhotoViewCellConfigureBlock  photoCellBlock;

    @end

    @implementation PhotoDataSource

    - (instancetype)init
    {
        return  nil;
    }

    - (instancetype)initWithItem:(NSArray *) items
          cellIdentifier:(NSString *)identifier
    configurePhotoCellBlock:(PhotoViewCellConfigureBlock)configureBlock
    {
       self = [super init];

      if (self) {
         self.items = items;
            self.identifier = identifier;
            self.photoCellBlock = configureBlock;
      }

      return self;
    }

    - (id)itemAtIndexPath:(NSIndexPath *) indexPath
    {
       return self.items[indexPath.row];
    }


    #pragma mark - 
    #pragma mark TableViewDataSource

    - (NSInteger)numberOfSectionsInTableView:(nonnull UITableView *)tableView
    {
       return 1;
    }

    - (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
       return self.items.count;
    }

    - (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView
             cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [tableView  dequeueReusableCellWithIdentifier:self.identifier forIndexPath:indexPath];

     id item = [self itemAtIndexPath:indexPath];

        //self.photoCellBlock(cell,item);
     [self.delegate tableViewCell:cell item:item];

     return cell;
    }
    @end

    #import "ViewController.h"
    #import "PhotoDataSource.h"

    @interface ViewController ()<UITableViewDataSource,UITableViewDelegate,PhotoDelegate>
    @property (nonatomic, strong) PhotoDataSource * photoDataSource;
    @property (nonatomic, strong) NSArray *items;
    @end

    @implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.items = @[@"are you ok", @"I am ok", @"what is your        name?", @"Thank you"];

     [self.tableView registerClass:[UITableViewCell class]
       forCellReuseIdentifier:@"PhotoCell"];
     [self setupPhotoDataSource];
    }

    - (void)setupPhotoDataSource
    {
      PhotoViewCellConfigureBlock photoBlock = ^(UITableViewCell * cell, NSString *text)
     {
         cell.textLabel.text = text;
       };

     self.photoDataSource = [[PhotoDataSource alloc] initWithItem:self.items
                                              cellIdentifier:@"PhotoCell"
                                     configurePhotoCellBlock:photoBlock];

        self.photoDataSource.delegate = self;
     self.tableView.dataSource = self.photoDataSource;
     self.tableView.delegate = self;

    }

    #pragma mark - talkingDelegate

    - (void)tableViewCell:(UITableViewCell *)cell item:(id)item
    {
        cell.textLabel.text = item;
       cell.imageView.image = [UIImage imageNamed:@"test.jpg"];
    }
    @end

將業(yè)務(wù)邏輯移到 Model 中

即將與model有關(guān)的業(yè)務(wù)邏輯通過分類或者直接在model中直接代替實(shí)現(xiàn)赖草,減輕view controller的代碼量

將網(wǎng)絡(luò)請(qǐng)求移到 Model 中

將網(wǎng)絡(luò)請(qǐng)求移動(dòng)model層学少,封裝在一個(gè)類中,后面view controller就可以通過回調(diào)來請(qǐng)求網(wǎng)絡(luò)了秧骑。好處在于緩存和錯(cuò)誤控制也可以在這個(gè)類里面實(shí)現(xiàn)

把 View 代碼移到 View 層

不應(yīng)該在view controller中構(gòu)建復(fù)雜的view,而應(yīng)該單獨(dú)將view分隔出來使用,更加簡潔明了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市磨镶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖雹锣,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攒射,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡咧最,警方通過查閱死者的電腦和手機(jī)酸纲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門无午,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酣衷,“玉大人,你說我怎么就攤上這事只锻。” “怎么了祖驱?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵匕坯,是天一觀的道長。 經(jīng)常有香客問我泞歉,道長铲球,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任芍瑞,我火速辦了婚禮妥凳,結(jié)果婚禮上拱镐,老公的妹妹穿的比我還像新娘磷箕。我一直安慰自己呜叫,他們只是感情好朱庆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布凯砍。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镇防。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天饲漾,我揣著相機(jī)與錄音蝙搔,去河邊找鬼。 笑死吃型,一個(gè)胖子當(dāng)著我的面吹牛勤晚,可吹牛的內(nèi)容都是我干的赐写。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼换淆,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼具壮!你這毒婦竟也來了峡眶?” 一聲冷哼從身側(cè)響起剧防,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辫樱,沒想到半個(gè)月后峭拘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狮暑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年鸡挠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搬男。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拣展,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缔逛,到底是詐尸還是另有隱情备埃,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布译株,位于F島的核電站瓜喇,受9級(jí)特大地震影響挺益,放射性物質(zhì)發(fā)生泄漏歉糜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一望众、第九天 我趴在偏房一處隱蔽的房頂上張望匪补。 院中可真熱鬧,春花似錦烂翰、人聲如沸夯缺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踊兜。三九已至,卻和暖如春佳恬,著一層夾襖步出監(jiān)牢的瞬間捏境,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工毁葱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垫言,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓倾剿,卻偏偏與公主長得像筷频,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容