<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chaoyang805的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chaoyang805</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chaoyang805]]></copyright><item><title><![CDATA[CoreData 从入门到精通（六）模型版本和数据迁移]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/54408135</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/54408135</guid><author>chaoyang805</author><pubDate>Fri, 13 Jan 2017 14:15:09 +0800</pubDate><description><![CDATA[前面几篇文章中讲的所有内容，都是在同一个模型版本上进行操作的。但在真实开发中，基本上不会一直停留在一个版本上，因为需求是不断变化的，说不定什么时候就需要往模型里添加新的字段，添加新的模型，甚至是大规模的重构；所以数据的迁移就显得尤为重要了。 
CoreData 中，数据迁移本质就是把旧的 SQLite 数据库里的内容，复制到新的 SQLite 数据库里去，让新的数据库作为默认的数据存储。伴随着模型版]]></description><category></category></item><item><title><![CDATA[CoreData 从入门到精通（五）CoreData 和 TableView 结合]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/53925961</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/53925961</guid><author>chaoyang805</author><pubDate>Thu, 29 Dec 2016 11:54:52 +0800</pubDate><description><![CDATA[我们知道 CoreData 里存储的是具有相同结构的一系列数据的集合，TableView 正好是用列表来展示一系列具有相同结构的数据集合的。所以，要是 CoreData 和 TableView 能结合起来，CoreData 查询出来的数据能同步地显示在 TableView 上，更好一点就是 CoreData 里的改动也能同步到 TableView 上，那就再好不过了。可喜的是，确实有这样一个 API]]></description><category></category></item><item><title><![CDATA[CoreData 从入门到精通（四）并发操作]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/53842329</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/53842329</guid><author>chaoyang805</author><pubDate>Fri, 23 Dec 2016 17:54:52 +0800</pubDate><description><![CDATA[通常情况下，CoreData 的增删改查操作都在主线程上执行，那么对数据库的操作就会影响到 UI 操作，这在操作的数据量比较小的时候，执行的速度很快，我们也不会察觉到对 UI 的影响，但是当数据量特别大的时候，再把 CoreData 的操作放到主线程中就会影响到 UI 的流畅性。自然而然地我们就会想到使用后台线程来处理大量的数据操作。使用后台 managedObjectContextCoreData]]></description><category></category></item><item><title><![CDATA[CoreData 从入门到精通（三）关联表的创建]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/53840537</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/53840537</guid><author>chaoyang805</author><pubDate>Fri, 23 Dec 2016 15:24:21 +0800</pubDate><description><![CDATA[CoreData 从入门到精通（三）关联表的创建上篇博客中讲了 CoreData 里增删改查的使用，学到这里已经可以应对简单的数据存储需求了。但是当数据模型复杂起来时，例如你的模型类中除了要存储 CoreData 里支持的数据类型外，还有一些自定义的数据类型，这个时候只靠单一的模型结构就没办法来满足这种需求了，于是我们就需要使用关联表结构，也就是我们这次要讲的内容。简介多表关联，相信接触过 SQL]]></description><category></category></item><item><title><![CDATA[CoreData 从入门到精通 二 数据的增删改查]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/53540384</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/53540384</guid><author>chaoyang805</author><pubDate>Fri, 09 Dec 2016 16:06:19 +0800</pubDate><description><![CDATA[在上篇博客中，讲了数据模型和 CoreData 栈的创建，那下一步就是对数据的操作了。和数据库一样，CoreData 里的操作也无非是增删改查。下面我们将逐步讲解在 CoreData 中进行增删改查的方式。基本的增删改查插入条目先来看一下插入条目的方式，在插入之前，我们需要先创建要插入的数据， 使用 NSEntityDesctiption 类的 + (__kindof NSManagedObject]]></description><category></category></item><item><title><![CDATA[CoreData 从入门到精通 （一） 数据模型 + CoreData 栈的创建]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/53446551</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/53446551</guid><author>chaoyang805</author><pubDate>Sat, 03 Dec 2016 18:09:33 +0800</pubDate><description><![CDATA[概述CoreData 是 Cocoa 平台上用来管理模型层数据和数据持久化的一个框架，说简单点，就是一个数据库存储框架。CoreData 里相关的概念比较多，而且初始化也非常繁琐，所以对初学者的学习还是有一些困难的。这篇文章将从头到尾详细地讲一遍 CoreData 的使用方法，从 CoreData 的初始化到简单的增删改查，再到批量处理，数据模型的版本更新以及和 TableView 的结合等，真正让]]></description><category></category></item><item><title><![CDATA[Swift 3.0 中的新变化]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/52614885</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/52614885</guid><author>chaoyang805</author><pubDate>Wed, 21 Sep 2016 23:51:00 +0800</pubDate><description><![CDATA[本文翻译自 www.hackingwithswift.com 上发布的英文文章，原文链接What’s new in Swift 3.0 
Swift 3.0 几乎更改了所有东西，如果不做一些修改的话，你的代码很可能不会编译成功。说真的，如果你觉得从 Swift 1.2 跳到 Swift 2.0 的变化大的话，那些还真的不算什么。 
在这篇文章里，我会尽可能多的用代码示例来解释那些至关重要的改变，希望]]></description><category></category></item><item><title><![CDATA[UIButton 的 backgroundImage 和 image 的填充模式]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/52400241</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/52400241</guid><author>chaoyang805</author><pubDate>Thu, 01 Sep 2016 15:35:04 +0800</pubDate><description><![CDATA[UIButton 的 backgroundImage 和 image 的填充模式在将 UIButton 当做图标按钮使用时，可以有两种方式给它设置一张图片：setBackgroundImage:forState: 和 setImage:forState:。用这两种方式都可以把 UIButton 作为图片按钮使用，这在图片背景的比例和UIButton 的宽高比例相同时是没什么问题的，图片都不会因为被拉]]></description><category></category></item><item><title><![CDATA[Git 入门]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/52370370</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/52370370</guid><author>chaoyang805</author><pubDate>Tue, 30 Aug 2016 16:16:41 +0800</pubDate><description><![CDATA[git 介绍什么是gitgit 是一种免费开源的版本控制工具，是由 Linux 发明者 Linus Torvalds 开发，使用 git 可以很方便的进行代码协同开发、版本控制。 
git 与 svn 
git 是分布式的，svn 是集中式。git 可以把仓库克隆到本地，在自己的机器上进行开发，将代码提交到本地，最后提交到远程仓库；svn 需要从服务器获取代码，开发完之后再提交回服务器，脱离了服务器]]></description><category></category></item><item><title><![CDATA[使用Xcode 7进行单元测试]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/52291207</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/52291207</guid><author>chaoyang805</author><pubDate>Tue, 23 Aug 2016 15:18:52 +0800</pubDate><description><![CDATA[单元测试简介单元测试是指对项目工程中每一个小的模块来单独进行测试，这些模块可以指一个方法、一个类或者一系列的类组成的一个功能模块。单元测试的目的就是验证这些模块是否按照预想的逻辑去执行。只有每个模块都能正常运作，最后的应用程序运行时才不会出错。编写单元测试能够提前发现模块中存在的问题并及时解决，如果不进行单元测试，而是在App所有代码完成时直接看运行效果，这个时候可能会有多个模块同时存在各种各样的问]]></description><category></category></item><item><title><![CDATA[Swift 3.0 中 GCD 相关函数的语法]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/52101355</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/52101355</guid><author>chaoyang805</author><pubDate>Wed, 03 Aug 2016 10:42:52 +0800</pubDate><description><![CDATA[在 Swift 3.0 中，一些 c 语言的 API 调用相比以前发生了较大的变化。包括 GCD 这个经常使用的框架。在Swift <= 2.2 的时代，调用方式和Objective-C中的用法相同，直接调用 dispatch_async(....) 就可以；这明显不够面向对象。终于，到了 Swift 3.0 ，Apple 把这些 C 语言的 API 改成了更加面向对象的调用方式。现在我们再调用上面]]></description><category></category></item><item><title><![CDATA[使用外部拦截法处理滑动冲突]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/52096768</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/52096768</guid><author>chaoyang805</author><pubDate>Tue, 02 Aug 2016 18:16:13 +0800</pubDate><description><![CDATA[当有多个可以滚动的View进行嵌套时，例如水平的ScrollView嵌套多个ListView的情况，ScrollView水平滚动，而ListView是竖直滚动。由于滑动方向不一致，可能会出现滑动冲突。这时候可以通过重写父容器的 onInterceptTouchEvent 来决定在什么情况下，父容器应该拦截触摸事件，从而解决滑动冲突，这种方法称为外部拦截法。外部拦截法的大致代码实现如下，具体实现的时候]]></description><category></category></item><item><title><![CDATA[正则表达式的使用]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/51721458</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/51721458</guid><author>chaoyang805</author><pubDate>Mon, 20 Jun 2016 16:09:35 +0800</pubDate><description><![CDATA[定界符在程序语言中使用与Perl兼容的正则表达式，通常都需要将模式表达式放入定界符之间，如”/”.常使用斜线”/”作为定界符，如”/apple/”。用户只要把需要匹配的模式内容放入定界符之间即可。作为定界的字符也不仅仅局限于”/”，除了字母、数字和斜线”\”以外的任何字符都可以作为定界符，像”#”、”|”、”!”等都可以原子原子是正则表达式的最基本组成单元，而且在每个模式中最少要包含一个原子。原子是]]></description><category></category></item><item><title><![CDATA[使用NSPredicate进行数据库查询]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/51598945</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/51598945</guid><author>chaoyang805</author><pubDate>Mon, 06 Jun 2016 23:01:54 +0800</pubDate><description><![CDATA[简介NSPredicate提供了一个通用的数据查询方式，有两种Predicate类型，分别是comparison 和 compound：
comparison predicate 使用运算符来比较两个表达式
compound predicate 对比两个或多个predicate的结果，或者让其他的predicate 失效.
Cocoa 里支持非常多的 predicate 类型，例如：
简单的比较：]]></description><category></category></item><item><title><![CDATA[七个Swift中的陷阱以及避免方法]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/50990955</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/50990955</guid><author>chaoyang805</author><pubDate>Sun, 27 Mar 2016 11:53:48 +0800</pubDate><description><![CDATA[文章转载自简书作者bestswifter的文章，原文链接点击这里 或者查看英文原文
1.协议扩展：强大但是需要谨慎使用
一个Swift类可以去继承另一个类，这种能力是强大的。继承讲使类之间的特定关系更加清晰，并且支持细粒度代码共享。但是，Swift中如果不是引用类型的话（如：结构体、枚举），就不能具有继承关系。然而，一个值类型可以继承协议，同时协议可以继承另一个协议。虽然协议除了类型信息外不能]]></description><category></category></item><item><title><![CDATA[Swift2.2中的新变化]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/50989789</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/50989789</guid><author>chaoyang805</author><pubDate>Sun, 27 Mar 2016 00:27:32 +0800</pubDate><description><![CDATA[原文链接点击这里Swift2.2已经更新了，这次更新去除了一些难用的语法还添加了一些缺失的特性，并且还弃用了一些有争议的语言特性。这篇文章将详细介绍Swift2.2中的一些主要的变化和一些细微的改变，还会展示一些实际的代码例子来让你更快的上手Swift2.2。1. ++ 和 – 被弃用了Swift 2.2正式地弃用了++和–操作符，意味着他们仍然可用但当你用到时会得到哦一条警告。弃用一般是完全移除的]]></description><category></category></item><item><title><![CDATA[Objective-C runtime]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/50685958</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/50685958</guid><author>chaoyang805</author><pubDate>Thu, 18 Feb 2016 15:49:50 +0800</pubDate><description><![CDATA[文章转载自：http://tech.glowing.com/cn/objective-c-runtime/Objective-CObjective-C扩展了C语言，并加入了面向对象的特性和SmallTalk式的消息传递机制。而这个扩展的核心就是一个用C和汇编语言写的runtime库。它是Objective-C面向对象的基石。 
Objective-C是一门动态的语]]></description><category></category></item><item><title><![CDATA[《Android群英传》读书笔记（12）第十二章：Android 5.X新特性详解]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/50420961</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/50420961</guid><author>chaoyang805</author><pubDate>Mon, 28 Dec 2015 19:32:52 +0800</pubDate><description><![CDATA[由于第十章是介绍的Bmob云服务器，内容不多而且都很简单，就直接跳过了。下面来看看十一章关于Material Design的内容。
一、Material Design主题
使用兼容包里的Material Design主题
如果像书中说的那样直接使用Material Design的主题有一个缺点，就是只能运行在Android5.+的设备上，而Android 5.0以下的设备还需要重新写其他的主]]></description><category></category></item><item><title><![CDATA[Android 6.0 Marshmallow运行时权限处理]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/50408960</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/50408960</guid><author>chaoyang805</author><pubDate>Sat, 26 Dec 2015 16:12:00 +0800</pubDate><description><![CDATA[在最新的Android6.0Marshmallow系统中，Google加入了在程序运行时检测权限的机制，下面这些权限是需要在运行时进行判断的：


身体传感器()日历（）摄像头（）通讯录（ ）地理位置（）麦克风（）电话（）短信（）存储空间（）
上面只是针对相应的内容列出了一个具体的权限，具体还有其他的权限。

如果设置项目的targetSdkVersion>=23，当程序运行在Andr]]></description><category></category></item><item><title><![CDATA[《Android群英传》读书笔记（11）第十章：Android性能优化]]></title><link>https://blog.youkuaiyun.com/chaoyang805/article/details/50393657</link><guid>https://blog.youkuaiyun.com/chaoyang805/article/details/50393657</guid><author>chaoyang805</author><pubDate>Thu, 24 Dec 2015 12:22:50 +0800</pubDate><description><![CDATA[一、布局优化
1.Android渲染机制
在Android中系统通过VSYNC信号触发对UI的渲染、重绘，其间隔时间是16ms，即1000ms内显示60帧画面的单位时间，如果每次渲染画面的时间保持在16ms之内，那么我们看到的UI就是非常流畅的，如果在16ms内不能完成绘制，那么就会造成丢帧现象，即当前该重绘的帧被未完成的逻辑阻塞，例如一次绘制任务耗时20ms，那么在16ms系统发出VSYNC]]></description><category></category></item></channel></rss>