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

    NSString *aCellID = @"aCellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:aCellID]; if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:aCellID];
} cell.textLabel.text = [NSString stringWithFormat:@"这是第%tu行", indexPath.row];
return cell;
}
上述的代码非常常见,先定义一个cell的重用标识,然后再从table的池子里根据这个标识去取cell便于重用,如果没有取到cell就创建某种样式这种标识的cell,然后再分发数据给cell。
 
 
一、为什么要设定一个标识,为了cell的复用。如果某些情况下不想重用,那么就没必要创建这个标识,但是不创建标示我们创建cell的时候就只有一个initWithStyle,写个样式,然后加个标识;这样每次来取cell的时候就是直接拿,不用再去池子里取了。假如你的table里就展示三个cell完全适用,也没必要千篇一律地写上面那些代码,为什么写,难道每次都复用,或者我们根本不思考一些问题,直接那样写,我想我不应该是那样的人,也行是闲得蛋疼,有些人总会找些事来做,比如说我,并深知其中快乐。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     NSString *aCellID = @"aCellID";
TableViewCellw *cell = [[TableViewCellw alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:aCellID]; cell.textLabel.text = [NSString stringWithFormat:@"这是第%tu行", indexPath.row];
return cell;
}

既然已经不重用cell了,那么系统也不会再去池子里取了,进而这个标识也没用了,直接置空吧,这样写起代码来更简洁
    
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     TableViewCellw *cell  = [[TableViewCellw alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

    cell.textLabel.text = [NSString stringWithFormat:@"这是第%tu行", indexPath.row];
return cell;
}
这样没从池子里取而是直接创建cell不管你有没有设置重用标识,它都会在自身整个视图超出table时 dealloc。如果是从池子里取的,则出table时会被放到了池子里进行缓存等待下次重用。
 
 
有些时候,可能我们只是需要UITableViewCellStyleDefault这种样式的cell,那么在这种情况下我们的代码还可以写成这样
    
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

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

    cell.textLabel.text = [NSString stringWithFormat:@"这是第%tu行", indexPath.row];
return cell;
}

当然如果要你不是用的系统默认的样式,则又要把style这个init写出来,这样才能获取需求的样式
    
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     TableViewCellw *cell  = [[TableViewCellw alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];

    cell.textLabel.text = [NSString stringWithFormat:@"这是第%tu行", indexPath.row];
return cell;
}
需要注意的是上面的做法只适合于不需要重用的情况。一个talbe就用三四个cell展示一点数据,完全没必要写那些重用的代码。
就像公司到底是用纯代码,xib加代码还storyboard加代码来开发一样,根据需求怎样简单怎样选择开发方式。
有些公司一直坚持用纯代码开发,总是觉得有xib有storyboard,总觉得他们是xml格式的,到时运行或者其他什么的转化需要时间,可能会影响到性能。
 
其实经过编译然后链接再运行的时候,或者你解包一个app就能看到一些文件,或者你也像我一样学过汇编,知道到最底层的时候都是01串了,苹果打包时,已经把它们弄成01串了。就算真的影响性能,苹果这个这么注重性能优化的公司会允许我们大用xib,storyboard吗。
 
之前见一哥们的公司就用stroryboard开发,而且到了跟iOS开发中比单例还滥用的几百倍的感觉,猛地打开storyboard卡地我电脑,还以为pro不给力了,结果打开才发现好几百个控制器在里面,线飞来飞去地,整个银河系统星云尘埃联运的感觉……
 
二、为什么要从池子里取,这是table的默认的重用机制,里面放着某种标识的cell,等待提取等待复用,之前尝试让table不重用,无奈技术不到位。
 
 
三、为什么要判断cell为空,cell为空也就是没从池子里取到这种标识的cell。
 
不是每次cell都可能为空,比如你在storyboard里有cell并且设定了标识,那么就没必要判断为空的情况了,因为当系统从池子里取时,会有个从storyboard或者是xib里查找这种标识的cell的过程,所以当你非常确定时,就直接从池子里取吧。
 
应该是先看看storyboard中有没有这种标识的cell,所以如果你在storyboard中有了这个标识的cell,那么就不用判断为空了,直接系统每次就能在空的情况下在storyboard在拿到一个。所以后面见有些大神的代码更精简了,不过现在好多公司都是xib加代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // 注意这里的标识要跟storyboard或者xib里cell的标识要一样
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"aCellID"]; cell.textLabel.text = [NSString stringWithFormat:@"这是第%tu行", indexPath.row];
return cell;
}

说到到底,一开始就是由于cell个数少不想重用,不想写那些常规代码进而对常规代码进行了精简,

其实如果这些为数不多的cell如果在项目中功能需求不复杂的话,完全可以使用静态单元格来实现。

这样在控制器的代码也更简单了,不用写那三个写得快吐了的代理方法了,系统直接从storyboard中取。

修改静态单元格中的数据也简单

关于talbeViewCell一点感想的更多相关文章

  1. 学习javascript 的一点感想

    原文:学习javascript 的一点感想 //动态性是指,在一个Javascript对象中,要为一个属性赋值,我们不必事先创建一个字段,只需要在使用的时候做赋值操作即可,如下例:var obj=ne ...

  2. 关于 Bellman-Ford 与 Floyd 算法的一点感想

    在四种常用的最短路算法 Dijkstra, SPFA, floyd, Bellman-Ford 中, Dijks 和 SPFA 的使用较为普遍, 对大多数人来说, 也较为熟悉. 然而, floyd 与 ...

  3. 关于header file、static、inline、variable hides的一点感想

    前言 先看一段代码 #ifndef _INLINE_H #define _INLINE_H template<typename T> static inline T my_max(T a, ...

  4. 对torch的一点感想

    torch是一个基于LuaJIT的科学计算框架,知乎上有个人回答说torch比较适合科研用途, torch与matlab的很多函数很相似

  5. 关于litecoin莱特币挖矿、炒作的一点感想

    比特币早在一.二年前我就听说过这个词了,还自己试过搭设矿机,因为没找到显卡驱动,也没有人一起搞,所以中途放弃了. 后来就不断听说涨了多少倍,总想着都涨这么多了,错了也就错过了. 周二组会,一帮人兴起又 ...

  6. Unity3D 新人学习的一点感想

    想到那里写到那里吧 1.Unity3D的优点大家都知道:组件化.c#语言.可见即所得. 当初刚开始学习的是cocos2dx,c++的货,觉得还是写的不错的,也是国人开发的,真的代码很容易懂,直接看引擎 ...

  7. TreePuzzle 一点感想

    题目链接 这一道题看起来像是一道贪心的水题,但是情况较难考虑周全,比如下图,我就考虑漏了这种情况,点0是可以移动到点1的.然后我就各种奇怪的分类讨论.最终还是没能A,决定放弃治疗. 然后我看了看解答, ...

  8. 关于mac地址的一点感想

    因为怕mac地址冲突导致环路影响,所以修改了本地设备的mac地址.地址修改为 77:77:77:00:22:11, 结果导致 wlan0 下发不下来. 查看配置选项/etc/config/wirele ...

  9. 关于学习MMU的一点感想

    MMU的一个主要服务是能把各个人物作为各自独立的程序在其自己的虚拟存储空间中运行. 虚拟存储器系统的一个重要特征是地址重定位.地址重定位是将处理器核产生的地址转换到主存的不同地址,转换由MMU硬件完成 ...

随机推荐

  1. Linux 进程通信(有名管道)

    有名管道(FIFO) 有名管道是持久稳定的. 它们存在于文件系统中. FIFO比无名管道作用更大,因为他们能让无关联的进程之间交换数据. 管道文件一般用于交换数据. shell命令创建管道 一个she ...

  2. C++ 栈的基本操作

    // zhan.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namesp ...

  3. 关于错误提示:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决方案

    vs上的一个项目,弄了一个aes加密算法.提示说:调用的目标异常.此实现不是 Windows 平台 FIPS 验证的加密算法的一部分.弄了好久一直不行.解决不了.最后找了半天资料终于解决了.估计下来. ...

  4. Qt——树的搜索

    一.Qt中的树 Qt中树的实现有两种方式.第一种是使用Qt提供的QTreeWidget,很多函数都封装好,比较方便:另一种是通过QTreeView实现,设置它的数据模型,比如使用QStandardIt ...

  5. ASP.NET MVC学习系列(二)-WebAPI请求(转)

    转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...

  6. 学习笔记——Maven实战(一)坐标规划

    坐标是什么?为什么要规划? 坐标是Maven最基本的概念,它就像每个构件的身份证号码,有了它我们就可以在数以千万计的构件中定位任何一个我们感兴趣的构件.举个最简单的例子,如果没有坐标,使用JUnit的 ...

  7. iOS 自定义控件开发(上)

    工作需要,最近在进行iOS方面的图表工作.找了很多第三方库都无法实现效果,所以决定自己写一个控件. <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> #0 目 ...

  8. C# Winform实现炫酷的透明动画界面

    做过.NET Winform窗体美化的人应该都很熟悉UpdateLayeredWindow吧,UpdateLayeredWindow可以实现窗体的任意透明,效果很好,不会有毛边.不过使用这个API之后 ...

  9. Linq之Lambda进阶

    目录 写在前面 系列文章 带有标准查询运算符的Lambda Lambda中类型推断 Lambda表达式中变量作用域 异步Lambda 总结 写在前面 上篇文章介绍了Lambda的基本概念以及匿名方法, ...

  10. 年前辞职-WCF入门学习(1,2)

    前言 周一的时候辞职了,离开了从12年毕业后8月份开始一直到现在的公司. 辞职之后当然是玩.玩了若干天的游戏,真的是没日没夜啊,但是玩的太坑,怒删游戏.话说上次玩还是在14年7月份.下次还是过年回家再 ...