关于学习YYKit的记录
<1>遇到的问题
<1>使用@[].mutableCopy创建可变数组
代码出处:YYKitDemo-> YYRootViewController
源代码:self.titles = @[].mutableCopy
代码解读:
出处:https://github.com/objc-zen/objc-zen-book
The following should be avoided:
NSMutableArray *aMutableArray = [@[] mutableCopy];
The problems with the previous notation are both of efficiency and readability. On the efficiency side, an unnecessarily immutable object is created and immediately thrown away; this unlikely will slow down your app (unless the method here is called frequently) but there is really no reason to do this just to save some characters. Regarding the readability, we can see two problems here: the first is that when scanning through the code and seeing @[]
your mind is immediately connected to and instance of NSArray
, but in this case you need to stop and check more thoughtfully. Another aspect to take into account is that it would be very likely that someone with less experience will see your code and depending on his background he might not be very comfortable with the dichotomy between mutable and immutable objects. He or she could not be very familiar with the meaning of creating a mutable copy (obviously we are not suggesting that this knowledge is not necessary). Again, this is not something absolutely wrong but is more about code usability (that includes readability).
译文:与先前的语法比较,在效率可可读性上存在问题,在效率方面,一个不必要的不可变对象被创建并且立即释放,它们未必将减慢你的APP(除非这个方法在这里被频繁调用)但是它真的没有必要这样做仅仅是为了保存一些字符;关于可读性方面,我们会看到2个问题,第一个是当浏览代码看到@[]时,你的想法立刻被链接到一个NSArray实例,但是,假若这样你需要停下来检查的更加周到,另一个可以说服你的原因是,可能一个经验非常少的程序员看到你的代码,并且依靠他的背景知识,可能不是非常熟悉,并且会对可变和不可变对象产生歧义,她可能不是很熟悉这个创建mutable copy的语法(明显的我们不认为这个知识点不重要)相反,它不是完全错误的做法,但是更多的是关于这个代码的可用性(包括可读性)
<2>关于 - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated; 的使用
在导航+UITableView同时使用时,选中一个cell,push到下一个ViewController,此时如果back回来,当前的cell依然是选中的状态,解决方法就是使用deselectRowAtIndexPath方法取消选中,我们可能疑惑为什么有的时候不加这句控制器pop回来后选中状态也会消失,原因是因为如果UITableView是在UITableViewController中时,iOS SDK为我们进行了优化,所以可以不必使用deselectRowAtIndexPath方法取消选中状态,但是在在UIViewController中我们一定要使用deselectRowAtIndexPath取消选中状态
如果对项目要求高,一种更理想的方法是
- (void) viewWillAppear: (BOOL)inAnimated {
NSIndexPath *selected = [self.tableView indexPathForSelectedRow];
if(selected) [self.tableView deselectRowAtIndexPath:selected animated:YES];
}
如果这么处理,那么在pop回来的时候,可以提示刚才点进去的是哪一行,在UITableViewController中默认的也是这种效果.
<3>
关于学习YYKit的记录的更多相关文章
- Java学习-007-Log4J 日志记录配置文件详解及实例源代码
此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:20 ...
- UWP学习开发笔记记录(开篇)
零零散散开发微软移动2年多了,基本上从未记录或写过任何笔记.所以打算写一些自己的心得和技术的分享,大家一起来共同探讨.虽然现在UWP的工作几乎没有了,但是我感觉大家都是在观望,再看接下来微软的动作,所 ...
- Python模块学习 ---- logging 日志记录
许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4cp ...
- Opengl_入门学习分享和记录_00
2019.7.4 本着对游戏创作的热情,本人初步了解了一部分的unity引擎的使用,也学习了一点C#可是越学习unity我就反而对引擎内部感兴趣(不知道有没有一样的朋友=,=). 接着了解到了open ...
- 当时学习《鸟哥的Linux私房菜-基础学习篇》记录的点
1.当执行一个指令的时候,举例来说[ls],系统会依照PATH的设定去每个PATH定义的目录下搜寻文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先搜寻到的同 ...
- 优秀编程学习网站&博文记录
记录优秀讲解知识点博客内容,侵删! 编程者学习网站 LearnKu终身编程者的知识社区 自动化测试内容 Python 接口自动化测试 应用开源接口网站:https://httpbin.org/#/St ...
- mybatis 学习视频总结记录
学习mybaits简单增删改查例子记录 此整理是学习视频后的视频内容整理,后半段还没有整理 网易云课堂 SSM高级整合视频 地址 : http://study.163.com/course/cours ...
- SpringBoot学习(学习过程记录)
关于微服务和SOA 这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. 官网教程学习ht ...
- Kafka学习(学习过程记录)
Apache kafka 这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. Kafka ...
随机推荐
- Html5离线缓存详细讲解
离线缓存是Html5新特性之一,简单理解就是第一次加载后将数据缓存,在没有清除缓存前提下,下一次没有网络也可以加载,用在静态数据的网页或游戏比较好用.当然,Html5新的特性都不是所有浏览器都能支持的 ...
- Dapper学习 - Dapper.Rainbow(三) - Read
前面已经介绍了新增/修改/删除了, 接下来介绍一下Rainbow的Read方法. 一.Read -- Rainbow原生 1. 先看测试代码 var conStr = ConfigurationMan ...
- Dapper学习 - Dapper.Rainbow(一) - Create
Dapper这个ORM有许多扩展, 我自己用过两种, 也算是比较主流的两种, Rainbow和Extension, 这里就先介绍下Rainbow吧, 毕竟这个先用, 当然, 由于我使用的是mysql数 ...
- iOS——使用StroryBoard页面跳转及传值
之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思 ...
- 【C#】分享一个可灵活设置边框的Panel
---------------------------更新:2014-05-19--------------------------- 优化了一下逻辑,就是既然可以通过设置BorderSide=Non ...
- Ado.net[增删改查,GET传值]
1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Home.aspx.c ...
- ArrayList和LinkedList的区别
简单的说,ArrayList是顺序存储,而LinkedList是链式存储.
- 第 28 章 CSS3 多列布局
学习要点: 1.早期多列问题 2.属性及版本 3.属性解释 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS3 提供的多列布局,通过多列布局我们方便的创建流体的多列布局. 一.早期多列问题 我们 ...
- JS疑难点和GC原理
js解析与序列化json数据(一)json.stringify()的基本用法: 对象有两个方法:stringify()和parse().在最简单的情况下,这两个方法分别用于把JavaScript对象序 ...
- 优化JavaScripe 提升首页加载速度的几种方案解析
优化目的: 1. 减少load量. 2. 优化js,加快页面加载速度. 网站中最影响网站打开速度的是什么?我会告诉是网站中的javascript,简称JS.模板中引用的JS文件越多,打开速度越慢,细读 ...