自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 CoreData 从入门到精通(六)模型版本和数据迁移

前面几篇文章中讲的所有内容,都是在同一个模型版本上进行操作的。但在真实开发中,基本上不会一直停留在一个版本上,因为需求是不断变化的,说不定什么时候就需要往模型里添加新的字段,添加新的模型,甚至是大规模的重构;所以数据的迁移就显得尤为重要了。 CoreData 中,数据迁移本质就是把旧的 SQLite 数据库里的内容,复制到新的 SQLite 数据库里去,让新的数据库作为默认的数据存储。伴随着模型版

2017-01-13 14:15:09 1403 1

原创 CoreData 从入门到精通(五)CoreData 和 TableView 结合

我们知道 CoreData 里存储的是具有相同结构的一系列数据的集合,TableView 正好是用列表来展示一系列具有相同结构的数据集合的。所以,要是 CoreData 和 TableView 能结合起来,CoreData 查询出来的数据能同步地显示在 TableView 上,更好一点就是 CoreData 里的改动也能同步到 TableView 上,那就再好不过了。可喜的是,确实有这样一个 API

2016-12-29 11:54:52 1619

原创 CoreData 从入门到精通(四)并发操作

通常情况下,CoreData 的增删改查操作都在主线程上执行,那么对数据库的操作就会影响到 UI 操作,这在操作的数据量比较小的时候,执行的速度很快,我们也不会察觉到对 UI 的影响,但是当数据量特别大的时候,再把 CoreData 的操作放到主线程中就会影响到 UI 的流畅性。自然而然地我们就会想到使用后台线程来处理大量的数据操作。使用后台 managedObjectContextCoreData

2016-12-23 17:54:52 2146 3

原创 CoreData 从入门到精通(三)关联表的创建

CoreData 从入门到精通(三)关联表的创建上篇博客中讲了 CoreData 里增删改查的使用,学到这里已经可以应对简单的数据存储需求了。但是当数据模型复杂起来时,例如你的模型类中除了要存储 CoreData 里支持的数据类型外,还有一些自定义的数据类型,这个时候只靠单一的模型结构就没办法来满足这种需求了,于是我们就需要使用关联表结构,也就是我们这次要讲的内容。简介多表关联,相信接触过 SQL

2016-12-23 15:24:21 2529 1

原创 CoreData 从入门到精通 二 数据的增删改查

在上篇博客中,讲了数据模型和 CoreData 栈的创建,那下一步就是对数据的操作了。和数据库一样,CoreData 里的操作也无非是增删改查。下面我们将逐步讲解在 CoreData 中进行增删改查的方式。基本的增删改查插入条目先来看一下插入条目的方式,在插入之前,我们需要先创建要插入的数据, 使用 NSEntityDesctiption 类的 + (__kindof NSManagedObject

2016-12-09 16:06:19 3225 2

原创 CoreData 从入门到精通 (一) 数据模型 + CoreData 栈的创建

概述CoreData 是 Cocoa 平台上用来管理模型层数据和数据持久化的一个框架,说简单点,就是一个数据库存储框架。CoreData 里相关的概念比较多,而且初始化也非常繁琐,所以对初学者的学习还是有一些困难的。这篇文章将从头到尾详细地讲一遍 CoreData 的使用方法,从 CoreData 的初始化到简单的增删改查,再到批量处理,数据模型的版本更新以及和 TableView 的结合等,真正让

2016-12-03 18:09:33 12655 3

翻译 Swift 3.0 中的新变化

本文翻译自 www.hackingwithswift.com 上发布的英文文章,原文链接What’s new in Swift 3.0 Swift 3.0 几乎更改了所有东西,如果不做一些修改的话,你的代码很可能不会编译成功。说真的,如果你觉得从 Swift 1.2 跳到 Swift 2.0 的变化大的话,那些还真的不算什么。 在这篇文章里,我会尽可能多的用代码示例来解释那些至关重要的改变,希望

2016-09-21 23:51:00 5762

原创 UIButton 的 backgroundImage 和 image 的填充模式

UIButton 的 backgroundImage 和 image 的填充模式在将 UIButton 当做图标按钮使用时,可以有两种方式给它设置一张图片:setBackgroundImage:forState: 和 setImage:forState:。用这两种方式都可以把 UIButton 作为图片按钮使用,这在图片背景的比例和UIButton 的宽高比例相同时是没什么问题的,图片都不会因为被拉

2016-09-01 15:35:04 18616

原创 Git 入门

git 介绍什么是gitgit 是一种免费开源的版本控制工具,是由 Linux 发明者 Linus Torvalds 开发,使用 git 可以很方便的进行代码协同开发、版本控制。 git 与 svn git 是分布式的,svn 是集中式。git 可以把仓库克隆到本地,在自己的机器上进行开发,将代码提交到本地,最后提交到远程仓库;svn 需要从服务器获取代码,开发完之后再提交回服务器,脱离了服务器

2016-08-30 16:16:41 503

原创 使用Xcode 7进行单元测试

单元测试简介单元测试是指对项目工程中每一个小的模块来单独进行测试,这些模块可以指一个方法、一个类或者一系列的类组成的一个功能模块。单元测试的目的就是验证这些模块是否按照预想的逻辑去执行。只有每个模块都能正常运作,最后的应用程序运行时才不会出错。编写单元测试能够提前发现模块中存在的问题并及时解决,如果不进行单元测试,而是在App所有代码完成时直接看运行效果,这个时候可能会有多个模块同时存在各种各样的问

2016-08-23 15:18:52 1946

原创 Swift 3.0 中 GCD 相关函数的语法

在 Swift 3.0 中,一些 c 语言的 API 调用相比以前发生了较大的变化。包括 GCD 这个经常使用的框架。在Swift <= 2.2 的时代,调用方式和Objective-C中的用法相同,直接调用 dispatch_async(....) 就可以;这明显不够面向对象。终于,到了 Swift 3.0 ,Apple 把这些 C 语言的 API 改成了更加面向对象的调用方式。现在我们再调用上面

2016-08-03 10:42:52 685

转载 使用外部拦截法处理滑动冲突

当有多个可以滚动的View进行嵌套时,例如水平的ScrollView嵌套多个ListView的情况,ScrollView水平滚动,而ListView是竖直滚动。由于滑动方向不一致,可能会出现滑动冲突。这时候可以通过重写父容器的 onInterceptTouchEvent 来决定在什么情况下,父容器应该拦截触摸事件,从而解决滑动冲突,这种方法称为外部拦截法。外部拦截法的大致代码实现如下,具体实现的时候

2016-08-02 18:16:13 569

原创 正则表达式的使用

定界符在程序语言中使用与Perl兼容的正则表达式,通常都需要将模式表达式放入定界符之间,如”/”.常使用斜线”/”作为定界符,如”/apple/”。用户只要把需要匹配的模式内容放入定界符之间即可。作为定界的字符也不仅仅局限于”/”,除了字母、数字和斜线”\”以外的任何字符都可以作为定界符,像”#”、”|”、”!”等都可以原子原子是正则表达式的最基本组成单元,而且在每个模式中最少要包含一个原子。原子是

2016-06-20 16:09:35 461

原创 使用NSPredicate进行数据库查询

简介NSPredicate提供了一个通用的数据查询方式,有两种Predicate类型,分别是comparison 和 compound:comparison predicate 使用运算符来比较两个表达式compound predicate 对比两个或多个predicate的结果,或者让其他的predicate 失效.Cocoa 里支持非常多的 predicate 类型,例如:简单的比较:

2016-06-06 23:01:54 3029

转载 七个Swift中的陷阱以及避免方法

文章转载自简书作者bestswifter的文章,原文链接点击这里 或者查看英文原文1.协议扩展:强大但是需要谨慎使用一个Swift类可以去继承另一个类,这种能力是强大的。继承讲使类之间的特定关系更加清晰,并且支持细粒度代码共享。但是,Swift中如果不是引用类型的话(如:结构体、枚举),就不能具有继承关系。然而,一个值类型可以继承协议,同时协议可以继承另一个协议。虽然协议除了类型信息外不能

2016-03-27 11:53:48 455

翻译 Swift2.2中的新变化

原文链接点击这里Swift2.2已经更新了,这次更新去除了一些难用的语法还添加了一些缺失的特性,并且还弃用了一些有争议的语言特性。这篇文章将详细介绍Swift2.2中的一些主要的变化和一些细微的改变,还会展示一些实际的代码例子来让你更快的上手Swift2.2。1. ++ 和 – 被弃用了Swift 2.2正式地弃用了++和–操作符,意味着他们仍然可用但当你用到时会得到哦一条警告。弃用一般是完全移除的

2016-03-27 00:27:32 1247

转载 Objective-C runtime

文章转载自:http://tech.glowing.com/cn/objective-c-runtime/Objective-CObjective-C扩展了C语言,并加入了面向对象的特性和SmallTalk式的消息传递机制。而这个扩展的核心就是一个用C和汇编语言写的runtime库。它是Objective-C面向对象的基石。 Objective-C是一门动态的语

2016-02-18 15:49:50 512

原创 《Android群英传》读书笔记(12)第十二章:Android 5.X新特性详解

由于第十章是介绍的Bmob云服务器,内容不多而且都很简单,就直接跳过了。下面来看看十一章关于Material Design的内容。一、Material Design主题使用兼容包里的Material Design主题如果像书中说的那样直接使用Material Design的主题有一个缺点,就是只能运行在Android5.+的设备上,而Android 5.0以下的设备还需要重新写其他的主

2015-12-28 19:32:52 794

原创 Android 6.0 Marshmallow运行时权限处理

在最新的Android6.0Marshmallow系统中,Google加入了在程序运行时检测权限的机制,下面这些权限是需要在运行时进行判断的:身体传感器()日历()摄像头()通讯录( )地理位置()麦克风()电话()短信()存储空间()上面只是针对相应的内容列出了一个具体的权限,具体还有其他的权限。如果设置项目的targetSdkVersion>=23,当程序运行在Andr

2015-12-26 16:12:00 1694

原创 《Android群英传》读书笔记(11)第十章:Android性能优化

一、布局优化1.Android渲染机制在Android中系统通过VSYNC信号触发对UI的渲染、重绘,其间隔时间是16ms,即1000ms内显示60帧画面的单位时间,如果每次渲染画面的时间保持在16ms之内,那么我们看到的UI就是非常流畅的,如果在16ms内不能完成绘制,那么就会造成丢帧现象,即当前该重绘的帧被未完成的逻辑阻塞,例如一次绘制任务耗时20ms,那么在16ms系统发出VSYNC

2015-12-24 12:22:50 623

原创 《Android群英传》读书笔记(10)第九章:Android系统信息与安全机制

Android系统信息获取获取系统信息的途径,有下面两种途径:android.os.BuildSystemPropertyandroid.os.Build类里面的信息非常丰富,它包含了系统编译时的大量设备、配置信息,下面列举了一些:Build.BOARD——主板Build.BRAND——Android系统定制商Build.SUPPORTED_ABIS——CPU指

2015-12-22 11:14:26 671

原创 《Android群英传》读书笔记(9)第八章:Activity与Activity调用栈分析

一、Activity1.Activity形态Activity拥有多种形态,并且可以在多种形态间切换,以此来控制自己的生命周期:Active/Running这时候Activity处于Activity栈的最顶层,可见并与用户进行交互Paused当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶的时候,A

2015-12-21 15:20:57 421

原创 《Android群英传》读书笔记(8)第七章:Android动画机制与使用技巧

1.视图动画Android视图动画的分类:透明度动画——AlphaAnimation旋转动画——RotateAnimation位移动画——TranslateAnimation缩放动画——ScaleAnimation动画集合——AnimationSet视图动画的监听方式:animation.setAnimationListener(new Animation.Animatio

2015-12-20 13:17:15 511

原创 《Android群英传》读书笔记(7)第六章:Android绘图机制与技巧之三

1.SurfaceView一般的View通过刷新来重绘视图,Android系统通过发出VSYNC信号来进行屏幕的重绘,刷新的时间间隔是16ms。如果在16ms内View完成了所需要执行的操作,那么用户在视觉上就不会产生卡顿的感觉;而如果执行的逻辑太多,特别是需要频繁刷新的界面,如游戏界面,那么就会不断的阻塞主线程,从而导致界面卡顿。为了避免这种问题,Android提供了SurfaceView来

2015-12-19 16:52:15 380

原创 《Android群英传》读书笔记(6)第六章:Android绘图机制与处理技巧之二

1.色彩特效处理1.色彩矩阵分析在色彩处理中通常从下面三个角度描述一个图像:色调——物体传播的颜色饱和度——颜色的纯度,从0(灰)到100%(饱和)来进行描述亮度——颜色的相对明暗度Android中使用一个颜色矩阵ColorMatrix来处理这些效果,这个矩阵是一个4x5的数组矩阵,它用力对图片的色彩进行处理。而对于每一个像素点,都有一个颜色分量矩阵用来保存颜色的RGBA值,例如下面就是一个

2015-12-18 11:59:19 538

原创 《Android群英传》读书笔记(5)第六章:Android绘图机制与处理技巧之一

1.屏幕参数屏幕分辨率与DPI的对照表 密度 ldpi mdpi hdpi xhdpi xxhdpi 密度值 120 160 240 320 480 分辨率 240x320 320x480 480x800 720x1280 1080x19202. 在密度为160的屏幕上,即分辨率为320x480的屏幕上,1dp = 1px;在其

2015-12-16 21:24:25 386

原创 《Android群英传》读书笔记(4)第五章:Android Scroll分析

1.Android坐标系在Android中,将屏幕左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,向下是Y轴正方向。 系统提供了getLocatinoOnScreen(int location[]);这样的方法来获取Android坐标系中点的位置。2.视图坐标系视图坐标系描述子视图在父视图中的位置关系,视图坐标系的原点是父视图的左上角。通过getX()和getY()获得的是视

2015-12-16 11:40:28 414

原创 《Android群英传》读书笔记(3)第四章:ListView常用拓展

1.具有弹性的ListViewListView中有一个控制滑动到边缘的处理方法:protected boolean overScrollBy(int deltaX,int deltaY,int scrollX,int scrollY,int scrollRangeX,int scrollRangeY,int maxOverScrollX,int maxOverScrollY,boolean

2015-12-15 18:36:49 440

原创 《Android群英传》读书笔记(2)第四章:ListView常用优化技巧

1.使用ViewHolder模式提高效率ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次调用getView()时都去通过findViewById()实例化控件 使用ViewHolder非常简单,只需要在自定义的Adapter中定义一个内部类,并将布局中的控件作为成员变量,代码如下:public final class ViewHolder{ public Imag

2015-12-15 17:38:01 94

原创 《Android群英传》读书笔记(1)第三章:Android控件与自定义控件详解

一、Android控件架构1.在Android中控件大致分为两类:ViewGroup和View,ViewGroup作为父控件可以包含多个View控件,这就是我们常说的控件树。上层控件负责下层控件的测量和绘制,并传递交互事件。2.Android界面架构图:每个Activity都包含一个Window对象,多数由PhoneWindow来实现。PhoneWindow将一个DecorView设置为整个应用窗口

2015-12-14 12:11:41 408

转载 三大图片缓存库对比

一、四大图片缓存库基本信息 ImageLoader                                                               Picasso                                           Glide            Fresco  作者 nost

2015-12-13 12:55:59 1679

转载 Java NIO 与 IO的区别

下表总结了Java NIO和IO之间的差别:IONIO面向流面向缓冲阻塞IO非阻塞IO无                   选择器(Selector)下面将详细分析它们之间的区别:1、面向流和面向缓冲Java IO面向流意为着每次从流中读取一个或多个字节,直到读取完所有字节,它们没有被缓存在任

2015-12-12 21:07:02 367

转载 Java中常用的集合类和Map详解

Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection接口:Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements),一些Co

2015-12-08 22:48:09 1705 2

转载 Android适配华为手机虚拟按键显示或隐藏

华为的一些手机的屏幕上的虚拟按键是可以显示或者隐藏的,因此在布局适配的时候就要考虑到这个问题,要不然当虚拟按键被隐藏后界面的布局就会出现问题,下面给出一种解决方法,(原文来自:安卓适配碰到的一些问题)因为虚拟按键的打开会涉及到view的重绘,因此可以重写根layout中的onLayout方法来实现。假设根layout是FrameLayoutpublic class RootLayout extend

2015-12-08 22:36:42 9010

原创 Java排序算法

1.插入排序public static void insertSort(){ int a[] = {45,5,2,58,1,51,23,526,185,52}; int temp = 0; for(int i = 1;i < a.length;i++){ int j = i - 1; temp = a[i]; for(;j >=

2015-12-06 14:26:07 86

原创 Java 单链表逆序

单链表的初始状态: 进行一次迭代后的状态为: 可以看出迭代体代码为:Node prev = null;Node next;//迭代体代码next = head.next; //保存next节点head.next = prev; //将head.next节点指向prevprev = head; //将prev节点指向headhead = next;

2015-12-03 13:09:42 739

原创 使用ActionMode实现ListView的多选功能

在平时的使用中,我们经常会用到ListView的多选功能,一般比较常见的方式是通过在itemView中加入一个checkBox来实现。其实ListView的API中提供了用于实现多选功能的相关接口。可以通过设置ListView的choiceMode属性来实现listview的item项在长按时激活多选的功能,再配合ListView.MultiChoiceModeListener的回调实现多选。 下

2015-11-05 20:53:57 3286 4

原创 配置没有界面的Activity

一般我们的activity都是有一个用来显示内容的界面,但是有些时候并不需要界面显示,直接在launcher点击了应用图标就能执行相关的功能,例如一键锁屏、清理内存等等。实现这个功能其实只要将MainActivity的theme设置为Theme.NoDisplay,并在onCreate中不去调用setContentView这个方法。按住ctrl点进去Theme.NoDisplay这个主题可以看到这个

2015-09-10 23:53:24 3133

原创 RecyclerView的使用方法

Android在Android L中推出了RecyclerView来代替ListView呈现列表类的数据,RecyclerView相比于ListView使用起来更加的灵活,可自定义的内容也更多。下面用一个例子来介绍一下RecyclerView的具体用法添加依赖RecyclerView位于support v7包中,使用之前需要添加依赖,在AndroidStudio中通过快捷键ctrl+shift+al

2015-09-05 14:38:49 1824

原创 android中Intent的用法总结

Android中intent常用来启动一个Activity,启动service和发送广播等,同时还可以携带各种数据,以及根据所指定的ACTION的不同,来打开文件,选取文件等等,反正是用处特别大就是了。Intent主要分为两类:隐式Intent和显式Intent: 隐式Intent,通常不具体指定打开的类名,而是通过指定ACTION来指定要执行的动作类型,如Intent intent = new

2015-08-26 19:26:05 611

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除