iOS笔记(24) 关于使用xCode的Tab来提高开发效率
前言
通过Google分析来看blog的访问统计。发现评价阅读时间也就一分钟不到。但是之前都习惯性写长篇大论。这次换一种方式来写blog。尽量写短一些的小一些的题目。使得更新数量上去。
这次我来说说怎么设置Tab来提高在xCode的工作效率。
我是如何使用Tab来提高效率的
xCode的Tab是什么
诺,就是这一个东西。

使用过各种浏览器的你一定不会陌生。对在xCode里面我们也可以开出多个页面。而且每一个页面的状态是单独保存的。
iOS笔记(24) 关于使用xCode的Tab来提高开发效率
通过Google分析来看blog的访问统计。发现评价阅读时间也就一分钟不到。但是之前都习惯性写长篇大论。这次换一种方式来写blog。尽量写短一些的小一些的题目。使得更新数量上去。
这次我来说说怎么设置Tab来提高在xCode的工作效率。
诺,就是这一个东西。

使用过各种浏览器的你一定不会陌生。对在xCode里面我们也可以开出多个页面。而且每一个页面的状态是单独保存的。
iOS笔记(23) iOS进行单元测试OCUnit+xctool
简单说来就是为你的方法多专门写一个测试函数。以保证你的方法在不停的修改开发中。保持正确。如果出错,第一时间让你知道,这样从最小单位开始监控来保证软件的质量。
其实要开始写单元测试的原因是,由于我的原因格志的存储逻辑一直有问题。 一个是代码写的比较搓,一个是修改存储的逻辑的话。影响面比较大。可能修复了一个bug而引入了未知的多个bug。为了Sumi早日达到国际化大厂的标准。决定上单元测试于格志。其实最根本的目的还是想要项目变的更加可靠。
关于测试的书,一搜就一大把。都有高深的理论和方法来指导怎么写单元测试的方法。我觉得嘛不用搞了这么复杂。 无非就3种时候会去想写测试:
第一种是完成了代码,恩我要测试一下我写的这些方法可靠不可靠。那这时候可以写测试。
第二种一个著名的方法论TDD。主要思想就是在写代码之前,就全部设计好借口。函数名字什么的。然后在写能通过测试的函数。
第三种就是发现了bug,我修复了这个bug。为了确保修复是成功的。那就写个测试吧。
我觉得啊,着三种都没有什么好或差。能写测试的少年都是好少年。何必这么在意什么时候去写呢。
一个完整的测试类组成像下图

在一开始可能测试方法里面需要一些上下文环境。这些可以在Setup里面去完成。然后才可是执行自己写的测试方法。 然后测试结束以后,可能产生了一些垃圾数据文件什么的。这时候你可以在TearDown方法里面把他们处理掉。
以上大部分都是我自己的粗浅理解,如果你需要更多关于单元测试请阅读更加系统专业的书籍。
iOS笔记(22) CoreData (四) 监听NSFetchedResultsController
之前说过, NSFetchedResultsController是有两个重要的功能。
第一:NSFetchedResultsController是作用在Core Data上的,通过NSFetchRequest来查询Core Data里面的数据.可以返回按照组分好的数据.这样便于UITableView来显示.
第二:但Model改变的时候NSFetchedResultsController能及时的发出通知.准确的说,应该是当NSManagedObjectContext发生改变的时候,NSFetchedResultsController能知道这些变化,然后发出通知出来.以便UITableview能及时的更新.
上一篇写了第一点. 现在写第二点.
iOS笔记(21) CoreData (三) NSFetchedResultsController
NSFetchedResultsController是一个让人爱恨交加的一个类。如果使用得当,NSFetchedResultsController能帮组减少很多代码。如果使用不当,整个App就随时崩溃。
NSFetchedResultsController我觉得最初的设计应该是为了配合UITableView来使用的。因为UITableView在iOS的应用App中出场次数实在是太高了.而且UITableView是重要的数据展示View,所以需要频繁的向Model去请求数据,但是根据MVC来说,V不应该直接跟M联系的.这样就在Core Data下面出现了一个C–NSFetchedResultsController来把V和M协调起来. NSFetchedResultsController就是这个C.
NSFetchedResultsController是有两个重要的功能。
第一:NSFetchedResultsController是作用在Core Data上的,通过NSFetchRequest来查询Core Data里面的数据.可以返回按照组分好的数据.这样便于UITableView来显示.
第二:但Modle改变的时候NSFetchedResultsController能及时的发出通知.准确的说,应该是当NSManagedObjectContext发生改变的时候,NSFetchedResultsController能知道这些变化,然后发出通知出来.以便UITableview能及时的更新.
UITableView是在iOS开发中,展示大量内容的首选。我个人认为的原有有一下几点:
这样,使得UITableView在iOS App中随处可见。
原生应用

一些有名的App.图片信息较老

包括游戏

这些都说明UITableView在一个App中其实是一个很常用的控件。我应该好好的学习它。
上次只是说了三个Core Data栈基本类。这次准备介绍一下常用的类。

Core Data是一次底层数据封装成面向对象的技术。最直接的表现就是在SQLite里面的一条记录在Core Data里面的表现是一个NSManagedObject对象。因此我们的增删改查都是基于操作对象的。恩这里多说一句,NSManagedObject是相对NSManagedObjectContext里面是唯一的。而真实的应用情况可能是NSManagedObjectContext会有多个。而NSManagedObjectContext线程不是安全的,所以可能有你多个NSManagedObjectContext里面各自有指向同一条数据的不同的NSManagedObject。这个情况需要你的程序设计和逻辑上去解决。暂时不讨论。
恩,用Core Data也有一段时间了。大大小小的坑也都坑过了。重来没有认真的记录一次。这次需要好好的理一理Core Data。就当一次绝好的机会记录下来。也为了自己加深认识。
CoreData的学习是需要一定成本的。以至于我认识的人很少在用,大家要不就是用一个FMDB。或者做的App是一个已有的Web的延伸,数据直接用Web端的Api取回来就好了。
我们要用Core Data的理由有以下几点:
所以,没有理由拒绝使用Core Data做为你App的持久化。Core Data应该是一个跟Apple混的第一选择。
近一年抱了Apple大腿之后,各种表弟、师兄、朋友陆续也开始抱Apple大腿。难免遇到各种问题,这个时候在QQ交流效率低下,简直不可忍受。也不知大腾讯啥时候支持一下QQ for Mac的远程协助。这样有时候也可以帮助一下在家的老爸老妈解决一些PC上的问题。大神们绕道无鄙视。OS X乃纯Unix血统。教科书上都写了*nix系统可以ssh登录过去搞定一切。就想着可以用ssh来解决问题。无奈网络基础确实是挂课的水平曾经尝试过一次没有成功。这次又再次遇到远程协助的问题就好好Google了一次。研究了好一会儿终于搞定,在此记录。
#iOS读写文件
由于iOS App的机制和限定,我们在App里面的权限就仅限于App内部。这个打包好的内部称为沙箱。沙箱有利有弊。我觉得这个世界上没有绝对的好坏。虽然沙箱的作用限制了一些功能的实现。但是也确保了iPhone的安全机制。对于普通用户来说我觉得的利大于弊的。(MAS上架的软件也接受这一约束)
不管是读文件还是写文件我们都要需要知道文件的位置。这个位置在iOS里面就是沙箱的Document文件夹的位置。关于沙箱里面各个文件夹的功能和作用。Apple的某文档里面写的很清楚建议Google以后详细查看(懒得去找来贴了)。获取代码如下:
1 | NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); |
NSDocumentDirectoryz这个参数你点过去可以找到一堆类似的定义比如常用的NSLibraryDirectory,NSApplicationDirectory。这样就可以直接获取到对应的文件夹路径。其他的你照抄就好。想知道意思就点过去看呗。其实看变量名也可以猜测一二。
1 | NSString *filePath = [documentsDirectory stringByAppendingString:@"/hello.txt"]; |
然后我们加上我们文件名字构成一个完整的路径。注意文件名字前有一个/。
这样我们就获得一个文件路径了。