这些小Tips为本人近期读书笔记,收集来自网络开发者发布的技术文档,并非原创,共享的目的是为了扩散分享技术,共同进步。如有侵权不得转载等情况,请联系我告知,谢谢!
- 不管你在哪个线程注册了 observer,notification 在哪个线程 post,那么它就将在哪个线程接收
- 数据缓存方式选择:
- fmdata数据库(增删改查) –数据需要:增删改查
- coreData –数据需要:增删改查
- 序列化(NSUserDefault) –状态、偏好设置、默认选项
- 单独.plist –列表数据,城市信息等
- 单独.json文件 –页面列表数据
- realm框架(增删改查) –数据需要:增删改查
- 清除签名文件 删除签名文件 清理Profile文件:Xcode - Preferences - Account - View Details,这个时候左下角有个刷新图标,点击一下就可以了
- TableView头视图不随视图移动,头视图出现错位的错误原因:tableView的 UITableViewStyle 没有明确的声明。解决方法:在tableView声明的时候明确为 UITableViewStyleGrouped
- ViewController生命周期:
alloc -> initWithNibName -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> dealloc
注意1. 不要在loadView中调用父类方法super loadView,因为这会影响CPU性能。
注意2. 切换前后台不会调用viewWillAppear你看到的是非授权版本!爬虫凶猛,请尊重知识产权!
转载请注明出处:http://conanwhf.github.io/2016/08/31/Tips201608/
访问原文「开发Tips收集-2016年08月」获取最佳阅读体验并参与讨论
- 关于数据存储需要注意的点,总结在下面:
- 关键数据
内容:用户创建的数据文件,无法在删除后自动重新创建
路径:主目录/Documents
管理:iOS系统即时遇到存储空间不足的情况下,也不会清除,同时会备份到iTunes或iCloud中 - 缓存数据
内容:可用于离线环境,可被重复下载重复生成,即使在离线时缺失,应用本身也可以正常运行
路径:主目录/Library/Caches
管理:在存储空间不足的情况下,会清空, 并且不会被自动备份到iTunes和iCloud中 - 临时数据
内容:应用运行时,为完成某个内部操作临时生成的文件
路径:主目录/tmp
管理:随时可能被iOS系统清除,且不会自动备份到iTunes和iCloud,尽量在文件不再使用时,应用自己清空,避免对用户设备空间的浪费 - 离线数据
内容:与缓存数据类似,可以被重新下载和重建,但是用户往往希望这些数据即使在存储紧张时也不会被系统自动删除
目录:主目录/Documents 或 主目录/Library/自定义的文件夹
管理:与关键数据类似,即使在存储空间不足的情况下也不会被清除,应用自己应该清除已经不再使用的文件,以免浪费用户设备空间 。需要设置”不备份到iCoud” ,否则会审核不过。
- 关键数据
- App 的沙盒文件目录可以以 NSURL 的形式返回:
let documentURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first
- cell被重用如何提前知道? 重写cell的prepareForReuse 官方头文件中有说明.当前已经被分配的cell如果被重用了(通常是滚动出屏幕外了),会调用cell的prepareForReuse通知cell.注意这里重写方法的时候,注意一定要调用父类方法super prepareForReuse .这个在使用cell作为网络访问的代理容器时尤其要注意,需要在这里通知取消掉前一次网络请求.不要再给这个cell发数据了.
- addObserverForName监听消息处理跟addObserver的差别:addObserver的四个参数分别指定了通知的观察者、处理通知的回调、通知名及通知的发送对象;而addObserverForName同样是监听消息处理,只是它并没有观察者,却多出一个队列跟一个block的处理;addObserverForName参数说明,name和obj为nil时的情形与前面一个方法addObserver是相同的。如果queue为nil,则消息是默认在post线程中同步处理,即通知的post与转发是在同一线程中;但如果我们指定了操作队列,情况就变得有点意思了,我们一会再讲。block块会被通知中心拷贝一份(执行copy操作),以在堆中维护一个block对象,直到观察者被从通知中心中移除。所以,应该特别注意在block中使用外部对象,避免出现对象的循环引用。如果一个给定的通知触发了多个观察者的block操作,则这些操作会在各自的Operation Queue中被并发执行。所以我们不能去假设操作的执行会按照添加观察者的顺序来执行。该方法会返回一个表示观察者的对象,记得在不用时释放这个对象。
- 在iOS7之后,默认情况下,状态栏都是由UIViewController管理的,若想通过UIApplication进行管理,则需要配置plist文件:View controller-based status bar appearance 设置成NO (默认值为YES)