- 博客(46)
- 资源 (2)
- 收藏
- 关注
原创 iOS 相机开发总结
# Camera 组件讲解IOS相机## UIImagePickerController1.IOS中扑捉照片和视频最简单的方法是使用UIImagePickerController,一个封装了完整视频捕获管线和相机 UI 的 view controller。2.UIImagePickerController通过cameraOverlayView自定义UI(需要...
2019-09-19 00:19:41
1273
原创 2018 WWDC CoreData 最佳实践总结
Core Data Best Practice基础知识1、What is Core Data? Core Data 其实并不是一个传统意义上的数据库,而是一套数据对象管理系统。这套系统默认使用 SQLite 作为底层存储,由低向高构建一套管理组件栈,并提供缓存和对象管理机制2、基本概念NSManagedObject 托管对象 Managed Ob...
2019-09-19 00:14:31
365
原创 IOS系统自带社交分享
很多APP中都带有社交分享功能,通过用户的分享,让更多地人去了解和使用这个APP,目前社交分享是移动互联网应用程序推广的最重要手段之一,国内较或的分享平台有微信,IOS6后苹果集成的新浪微博,还有IOS7后集成的腾讯微博。 在IOS中,实现社交分享可以自己编写各个平台的分享代码,但代码量较多,也可以利用IOS自带的Social.framework,更可以利用第三方的分享框架,如友盟,S
2015-04-29 23:00:00
1743
原创 使用FMDB框架来操作数据库
一、什么是FMDBFMDB是iOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言API二、FMDB的优点1、使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码2、对比苹果自带的Core Data框架,更加轻量级和灵活3、提供了多线程安全的数据库操作方法,有效地防止数据混乱三、FMDB的三个主要类1、FMDatabase一个FMDatab
2015-04-22 08:51:14
1260
原创 SQLite的基本封装
当我们使用SQLite时,都需要先创建数据库创建数据表,再执行相应地sql语句,这样不利于对数据库操作进行统一管理,也不符合面向对象的思想,当我们的需求发生改变时,例如数据库表名改了,或者是要添加几个字段,这时候就会出现一种四处找数据库操作代码的情况,如果是一处两处还好,但如果是上百处,那就会是一个很大的工作量。所以我们可以来定义一个工具类SQLManager,统一对数据库操作进行管理。
2015-04-22 00:36:43
1091
原创 IOS SQLite3的使用
一、什么是SQLIte SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快二、数据库存储数据的步骤1、新建一个数据库2、新建一张表(table)3、添加多个字段(column,列,属性)4、添加多行记录(row,每行存放多个字段对应的值
2015-04-21 22:34:48
2202
原创 ios多线程操作(十二)—— 自定义NSOperation实现网络下载后回调
NSoperation作为一个抽象类,本身不具备封装操作的能力,所以必须使用它的子类来实现多线程操作,但当子类也无法达到我们的需求时,我们可以自定义一个NSoperation的子类,自己写实现方法! 自定义NSoperation的步骤很简单,只要重写main方法,在里面实现想执行的异步任务,但如果是异步操作,也就无法访问到主线程的自动释放池,所以需要自己手动创建自动释放池!
2015-03-25 19:06:39
1783
原创 ios多线程操作(十一)—— NSOperation的高级操作
NSOperation可以调用start方法来执行任务,但默认是同步执行的,如果将NSOperation添加到 NSOperationQueue(操作队列)中,系统会自动异步执行队列中的操作。 NSOperationQueue中可以对操作进行取消,暂停和恢复 取消函数为: - (void)cancelAllOperations; 也可以调用N
2015-03-24 23:09:36
1352
原创 ios多线程操作(十)—— 用NSOperation开启多线程操作
想要使用NSOperation(操作)来开启多线程操作必须配合NSOperationQueue(队列)来实现。NSOperation中并没有“任务”这个概念,取而代之的是“操作”,操作中封装着需要在子线程上执行的代码。具体的实现步骤如下: 1、先将需要执行的操作封装到一个NSOperation对象中 2、然后将NSOperation对象添加到NSOperationQueue
2015-03-22 22:30:49
841
原创 ios多线程操作(九)—— 用NSOperation代替GCD
NSOperation是另外一个“并发技术”,它可以使开发者在不用关心线程的情况下进行多线程操作!!! NSOperation的底层是用GCD进行封装,但并不是说NSOperation功能就没有GCD强大,相反,NSOperation的一些高级功能在GCD上不好做,但同样地GCD上的一些高级功能在NSOperation上也不好做,现在来看一下NSOperation和GCD的对比!
2015-03-22 21:23:54
1391
原创 ios多线程操作(八)—— GCD调度组
有这么一个需要,分别执行2个耗时的异步操作,等2个异步操作都执行完毕后在回到主线程执行操作。如果想要快速高效地实现这个需求,可以考虑使用调度组。调度组的创建代码如下:dispatch_group_t group = dispatch_group_create();往调度组里面添加任务的函数如下:dispatch_group_async(dispatch_group_t group,
2015-03-22 19:22:00
3009
原创 ios多线程操作(七)—— GCD延迟操作与一次性代码
使用GCD函数可以进行延时操作,该函数为dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ }); 现在我们来分解一下参数dispatch_time(DISPATCH_TIME_N
2015-03-21 21:55:23
2799
原创 ios多线程操作(六)—— GCD全局队列与主队列
GCD默认已经提供了全局的并发队列供整个应用使用,所以可以不用手动创建。 创建全局队列的函数为dispatch_queue_t q = dispatch_get_global_queue(long identifier, unsigned long flags) 参数类型为:long identifier:ios 8.0 告诉队列执行任务的“服务质量 quality
2015-03-20 21:07:44
7094
原创 ios多线程操作(五)—— GCD串行队列与并发队列
GCD的队列可以分为2大类型,分别为串行队列和并发队列 串行队列(Serial Dispatch Queue): 一次只调度一个任务,队列中的任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务) 创建一个队列 dispatch_queue_t q = dispatch_queue_create(const char *label, disp
2015-03-19 21:53:14
10080
原创 ios多线程操作(四)—— GCD核心概念
GCD全称Grand Central Dispatch,可译为“大派发中枢调度器”,以纯C语言写成,提供了许多非常强大的函数。GCD是苹果公司为多核的并行运算提出的解决方案,它可以自动利用更多的CPU内核来参与运算,会自动管理线程的生命周(创建线程、调度任务、销毁线程),而程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码! GCD中有两个核心概念,一是任务,二是队列。
2015-03-19 20:50:37
1200
原创 ios多线程操作(三)—— 线程通讯
一个进程中,线程并非单独存在,往往需要与其他线程进行通讯以执行特定的任务。接下来就用一个简单的例子来实现线程之间最简单的通讯,并借此探究一下UI控件下得常见设置 需求:从网络上下载一张图片在屏幕上显示,图片可以滚动,可以捏合缩放大小 项目开搞新建一个新项目。因为视图有滚动的需求,所以需要添加一个UIScrollView以及一个显示图片的UIImageView@i
2015-03-18 22:32:12
883
原创 ios多线程操作(二)—— NSThread的应用
一、基本使用1、三种创建子线程的方法(1)NSThread直接创建,一个NSThread对象就代表一条线程//实例化一个 NSThread对象 NSThread *t1 = [[NSThreadalloc]initWithTarget:selfselector:@selector(longOperation:)object:@"NSThread"];
2015-03-17 23:30:28
1080
原创 ios多线程操作(一)—— 多线程基础与原理
一、进程 进程是指在系统中正在运行的一个应用程序,每个进程之间都是独立的,每个进程都运行在其专用且受保护的内存空间内二、线程 一个进程要想执行任务就必须要有线程,每一个进程至少都要有一条线程。 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。 线程又分为主线程和子线程: 主线程:一个ios程序运行后,默认会开启一条
2015-03-17 22:10:11
1100
原创 剖析程序中的栈与堆的内存分配
在计算机系统中,运行的应用程序的数据都保存在内存中,不同类型的数据所保存在的区域不同,应用程序中总共有五个内存区域:(1)、栈区【stack】:由编译器自动分配并释放,一般存放函数的参数值,局部变量等(2)、堆区【heap】:由程序员分配和释放内存,如果程序员不释放,程序结束时,可能会由操作系统回收(3)、全局区【静态区】【static】:全局变量和静态变量的存储是放在一起的,而该区又
2015-03-17 21:37:26
909
原创 Object - C运行时应用(三)——实现NSCoding的自动归档和自动解档
当我们需要将一个对象进行归档时,都要让该对象的类遵守NSCoding协议,再实现归档和接档方法。例如有一个Person类,该类有两个成员变量@property (nonatomic,copy) NSString *name;@property (nonatomic,assign) int age;两个协议的实现方法如下/** * 将对象写入某个文件时需要调用,在该方法中说明哪
2015-03-16 21:41:01
1215
原创 Object - C运行时应用(二)—— 使用对象关联为分类增加属性(每个对象的属性互不干扰)
一、对象的关联方法有1、 void objc_setAssociatedObject(id object, const void *key, id value,objc_AssociationPolicy policy) ,关联对象(将值value与对象object关联起来)参数key:将来可以通过key取出这个存储的值参数policy:存储策略(assign、copy、ret
2015-03-16 20:50:02
875
原创 Object - C运行时应用(一)—— 拦截系统自带的方法交换实现
一、什么是运行时 运行时是一套纯C语言的API,编译器最终都会将OC代码转化为运行时代码。二、运行时常用函数1、* 获得某个类的类方法 Method class_getClassMethod(Class cls, SEL name)* 获得某个对象的对象方法 Method class_getInstanceMethod(Class cls, SEL name)* 交
2015-03-16 19:52:24
1498
原创 ios手势解锁
手势的解锁效果如下:编写环境:Xcode 6代码文件视图:以九个按钮排列成九宫格形成手势解锁视图,自定义一个继承自UIButton得类来描述按钮(对按钮进行封装)#import "CXCircleView.h"@implementation CXCircleView- (instancetype)initWit
2015-03-01 11:57:32
1122
原创 使用分类为数组添加快速排序方法和折半查找方法
快速排序的基本思想:首先选一个轴值(即比较的基准),将待排记录分割成独立的两部分,左侧记录的元素均小于或等于轴值,右侧记录的元素均大于或等于轴值,然后分别对这两部分重复上述过程,直到这个序列有序。冒泡排序的基本思想:两两比较相邻记录的元素,如果反序则交换,直到没有反序为止。选择
2014-12-13 22:34:25
759
原创 C语言回顾之结构体、枚举、宏定义、typedef、extern和static的使用
一、结构体1、什么是结构体由多个不同类型的数据构成一个整体2、定义结构体步骤(1)定义结构体类型(2)根据结构体类型,定义结构体变量例如:#include int main(){ struct Person { // 里面的3个变
2014-12-11 19:02:41
1729
原创 C语言回顾之进制、内存分析与指针
一、指针前奏1、指针的重要性指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。2、小需求void change(int n)函数调用完毕后,改变实参的值分析:修改实参的值->找到存储空间->地址二、指针变量
2014-12-11 16:29:31
744
原创 C语言回顾之函数与数组
一、什么是函数任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。所以,可以说C语言程序是由函数构成的。比如你用C语言编写了一个MP3播放器程序,那么它的程序结构如下图所示:二、函数的定义1、定
2014-12-11 12:37:38
952
原创 C语言基础(二)
一、算术运算C语言一共有34种运算符,包括了常见的加减乘除运算1、加法运算+除开能做加法运算,还能表示正号:+5、+902、减法运算-除开能做减法运算,还能表示符号:-10、-293、乘法运算*注意符号,不是x,而是*4、除法运算/(1)注意符号,不
2014-12-11 10:56:16
1133
原创 C语言基础(一)
一、计算机基础1、计算机运行原理(1)硬件基本组成:硬盘、内存、CPU(2)各个部件之间的运作协调2、计算机只能识别0和1(1)0和1组成的指令(2)0和1组成的数据二、C语言1、什么是关键字(1)关键字就是C语言提供的有特殊含义
2014-12-11 10:13:43
723
原创 剖析Object-C中的属性与消息传递机制
一、属性属性是OC的一项特性,用于封装对象中的数据,OC对象通常会吧其所需要的数据保存为各种实例变量,实例变量一般都是通过存取方法来访问的。例如有一个Person类,该类具有姓名和年龄等属性#import @interface Person : NSObject@prop
2014-12-10 18:15:40
743
原创 浅谈NSCopying协议
如果想让一个类具有拷贝功能,,那么就要实现NSCopying协议,该协议中就只有一个方法:- (id)copyWithZone : (NSZone *)zoneNSZone是用来分配和释放内存的一种方式,它不是一个对象,而是用c结构存储了关于对象的内存管理信息。copy方法由NSObj
2014-12-10 12:44:58
981
原创 初窥Foundation框架
一、结构体1、NSRange(location,length)用NSRange来表示所在位置以及长度 NSString *str = @"love you"; NSRange range = [str rangeOfString:@"love"]; NSLog(@"loc = %ld,length = %ld",range.location,range.lengt
2014-12-09 19:43:58
652
原创 OC协议,代理模式与单例模式
一、协议(protocol)1、协议的基本用途(1)协议可以用来声明一大堆方法(不能声明成员变量)(2)只要某个类遵守了某个协议,就相当于拥有这个协议中的所有方法声明(3)只要父类遵守了某个协议,就相当于子类也遵守了2、协议的格式(1)协议的编写协议中的方法
2014-12-09 15:37:23
829
原创 block的使用
一、block(块)的定义block是一种类型,封装了一段代码块,可以在任何时候执行,block也可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。block与函数类似,只不过是直接定义在另一个函数里,和定义它的那个函数共享同一个范围内的东西。block用“^”符号来表示
2014-12-09 10:44:48
693
原创 ARC机制
一、ARC简介ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。开发者不再需要担心内存管理,因为编译器为你处理了一切ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器。因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器
2014-12-08 19:54:49
603
原创 内存管理
一、基本原理1、内存管理(1)什么是内存管理内存管理是指软件运行时对计算机内存资源的分配和使用技术,其最主要的目的是如何高效快速的分配,并且在适当的时候释放和回收内存资源。(2)为什么需要内存管理移动设备的内存极其有限,每个app所能占用的内存也是有限制的,当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象
2014-12-08 16:00:15
588
原创 OC核心语法(二)
一、description方法1、 -description方法使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出2、 +description方法使用NSLog和%@输出某个类对象时,会调用类对象+descript
2014-12-06 11:05:19
546
原创 深入类的本质
一、实例对象的本质每个对象都是由类创建出来的,每个Object-C对象实例都是指向某块内存数据的指针,所以在声明变量时,类型后都需要有一个“*”字符。例如:NSString *someString =@"someObject";该变量someString中存放的是这个字符串对象在内存中的地址,而NSString自身的数据就存放于该地址中,众所周知,对象所占的内存总是分配在“堆空间”(h
2014-12-05 15:53:37
663
原创 OC核心语法
一、点语法1、认识点语法声明一个Person类@interface Person : NSObject{int _age;}- (void)setAge:(int)age;- (int)age;@endPerson类的实现implemen
2014-12-04 23:38:42
544
原创 OC面向对象三大特性
一、特性一:封装1、封装的概念封装是指把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。2、set方法和get方法(1)set方法和get方法的使用场合由于@public的成员可以被任何对象访问,存在安全隐患,所
2014-12-04 23:12:02
724
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人