自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

草不谢荣于春风, 木不怨落于秋天。

  • 博客(342)
  • 资源 (7)
  • 收藏
  • 关注

原创 SDWebImage 涉及知识点位移枚举的操作解析

凡是涉及枚举传值时,不了解的就直接传入0 因为枚举有个约定,传入值若为0则不进行任何有关操作。如果要传递多个值则多个枚举值之间用或 | 连接 作为参数传递即可新建工程,代码如下://// ViewController.m// 位移枚举详解//// Created by apple on 15/10/25.// Copyright (c) 2015年 LiuXun. All

2015-10-25 11:16:01 403

原创 SDWebImage的介绍与基本使用

什么是SDWebImageiOS中著名的牛逼的网络图片处理框架包含的功能:图片下载、图片缓存、下载进度监听、gif处理等等用法极其简单,功能十分强大,大大提高了网络图片的处理效率国内超过90%的iOS项目都有它的影子项目地址https://github.com/rs/SDWebImage- (void)sd_setImageWithURL:(NSURL *)url;

2015-10-24 23:44:55 910

原创 第三方框架介绍

自定义NSOperation步骤很简单:重写-(void)main方法,在里面实现想执行的任务重写main方法时需要注意:—自己创建自动释放池(如果是异步操作,无法访问主线程的自动释放池)—经常通过-(BOOL)isCancelled方法检测操作是否被取消,对取消做出相应。特别注意:定义了一个继承自NSOperation的操作类,凡是这个类的对象被添加到操作队列,就会执行它的m

2015-10-24 22:21:07 680

原创 NSCache缓存类的详解

NSCache:专门做缓存的类NSCache简介:NSCache是苹果官方提供的缓存类,用法与NSMutableDictionary的用法很相似,在AFNetworking和SDWebImage中,使用它来管理缓存。NSCache在系统内存很低时,会自动释放一些对象(出自苹果官方文档,不过在模拟器中模拟内存警告时,不会做缓存的清理动作) 为了确保接收到内存警告时能够真正释放内存,最好调用一

2015-10-24 17:42:15 8633

原创 NSOperation之 设置UITabView的有沙盒图片缓存——剖析内在原理

注意:无沙盒缓存即(内存缓存)的缺点是,必须在有网的时候使用,一旦程序退出就会清除缓存。导致用户在没有网的时候无法使用即无法看到原先下载好的数据。所以这就需要用沙盒来保存缓存。有沙盒缓存的思路:(重点)原理图如下所示:前提(准备工作):开始有一个存放图片的缓存池全局属性即一个可变字典images,和一个专门存放下载操作的操作缓存池operations,开始都为空。启动程序,

2015-10-24 15:13:43 749

原创 NSOperation 之 Block循环引用——以及nil Nil NULL [NULL null]的区别

已知,字典和数组存放的对象都不可以为nil,否则会使程序崩溃。所以在字典或数组中添加对象时,必须先判断对象是否为空nil,如果为nil则不进行对象的添加操作。如果需要将对象赋值为空的话就存放[NSNULL null];[NSNull null]; 空对象,可以存放到字典或数组。NULL: c语言的空指针nil:  OC指向空对象的指针Nil:  空类。根控制器永远不会销毁。所以

2015-10-24 10:23:18 1583

原创 NSOPeration 之UItabView无沙盒缓存——UITabView下载图片后 从操作缓冲池清除下载操作

当数据很大,即使是2000条数据。存放下载操作的缓冲池也会非常大,仍然需要及时清理一下。清理的步骤:在一个图片下载完成后,就根据图片的链接在存放下载操作的缓冲池中删除此图片的操作。问题回顾总结:问题1:如果网速比较慢,会很卡 解决方法:使用异步下载 问题2:图片没有Frame,所有cell初始化的时候,给imageView的frame是0。异步下载完之后不显示 解决办法

2015-10-23 21:53:08 628

原创 NSOperation之为UItabView制作图片缓存——在didReceiveMemoryWarning方法中做图片缓存的清理操作

将图片保存到Model模型中的优缺点如下:优点:不用重复下载,利用MVC刷新表格,不会造成数据混乱,加载速度比较快。缺点:内存问题,所有下载好的图像都会保存在模型内。如果数据比较多假设为2000个就会造成内存警告。又因为图像与模型的耦合性太强。导致清理内存非常困难。为了解决内存问题,需要为UITabView制作图片缓存。制作图片缓存的步骤如下:(1)新建一个全局的可变字典。键用

2015-10-23 20:54:13 764

原创 NSOperation之为操作缓冲池解决操作重复添加操作的问题——UItabView的Cell数据下载并刷新的案例

问题1:如果网速比较慢,会很卡 解决方法:使用异步下载 问题2:图片没有Frame,所有cell初始化的时候,给imageView的frame是0。异步下载完之后不显示 解决办法:使用占位图(如果展位图比较大, 自定义cell可以解决) 问题3:如果图片下载速度不一致,同时用户快速滚动的时候,会因为Cell的重用导致图片混乱 解决方法:MVC,使用Model(模型)保存下载的图

2015-10-23 16:56:30 814

原创 利用NSOperation进行异步图片下载——设置UITabView数据,图片下载,占位图。解决异步下载和Cell重用造成的图片设置混乱。和多次重复下载的问题

同步下载图片:同步下载图片。就是直接下载,然后设置。因为下载是一个耗时操作,同步执行又限制当前操作执行不完就不允许执行下一个操作。从而造成界面卡顿的现象。如下图所示:为了解决这个问题:需要使用异步下载:即当前操作不执行完毕可以执行下一个操作。如下图所示:占位图:UITabViewCell中UIImageView是懒加载的方式执行的,如果没有图片是默认不显示的。所以一加载完毕

2015-10-23 15:32:57 1177

原创 NSOperation之依赖关系和GCD之间的对比

NSOperation之间可以设置依赖来保证执行顺序,这是GCD所不具备的功能:比如一定要让操作A执行完后,才能执行操作B,可以这么写:[operationB addDependency:operationA];  // 操作B依赖于操作A可以在不同Queue的NSOperation之间创建依赖关系,切记不要造成相互依赖。如下图所示:与GCD之间的区别如下: GCD

2015-10-23 10:49:07 3003

原创 NSOperation的高级功能——线程间通信&最大并发数&挂起&取消全部操作

线程间通信:就是在别的线程执行耗时操作,在主线程更新UINSOperationQueue *q = [[NSOperationQueue alloc] init];    [q addOperationWithBlock:^{        NSLog(@"耗时操作......%@", [NSThread currentThread]);                // 在

2015-10-23 09:19:23 2369

原创 NSOperation的基本使用——本质是对GCD的封装

NSOperation的作用配合使用NSOperation和NSOperationQueue也能实现多线程编程。NSOperation和NSOperationQueue实现多线程的步骤:先将需要执行的操作封装到一个NSOperation对象中。然后将NSOperation对象添加到NSOperationQueue中。系统会自动将NSOperationQueue中的NSOpera

2015-10-22 21:42:20 895

原创 GCD知识点概要总结

GCD总结:GCD基础:C语言的“并发技术”框架。是苹果共公司为多核的并行运算提出的解决方案。自动管理线程的生命周期(创建线程、调度线程、销毁线程等)程序员只需要告诉GCD想要如何执行什么任务,不需要编写任何线程代码。注意以下生词的理解:dispatch:派遣调度queue:队列   sync:同步  async:异步 concurrent:并发GCD核心概念:

2015-10-22 15:59:05 499

原创 GCD之——延迟执行、调度组、以及一次性执行代码

延时执行:IOS常见的延时执行有2种方式调用NSObject的方法[self performSelector:@selector(run) withObject:nil afterDelay:2.0];// 2秒后调用self的run方法使用GCD函数dispatch_after(dispatch_time(DISPATCH_TIME_NOW), (int64_t)(2.0

2015-10-21 22:52:50 514

原创 GCD之队列的选择和与主线程之间的通信

队列的选择:串行队列异步执行- 开一条线程, 顺序执行。- 效率:不高,执行比较慢,资源占用小,省电。适用于网络连接:一般网络是3G,对性能要求不是很高。并发队列异步执行:- 开启多条线程,并发执行。- 效率:高,执行快,资源消耗大,费电。适用场合:适用于网络WiFi,或者需要很快的响应,要求用户体验非常流畅。对任务执行顺序没有要求。-同步任务:一般只会

2015-10-21 21:00:20 459

原创 GCD之主队列、全局并发队列、以及同步任务的执行

主队列:专门负责在主线程上调度任务,不会在子线程上调度任务,在主队列不允许开新线程。主队列的特点:只在主线程运行,不开新线程。异步执行:会开新线程,在新线程执行。异步执行特点:不需要马上执行。异步主队列:不会开辟新线程,只在主线程上顺序执行。异步主队列的特点:主队列上的任务不会马上执行而是只把任务放到主队列,等线程有空时才去执行。同步执行特点:不会开辟新线程,会马上执行。

2015-10-21 19:29:49 4611

原创 GCD的简单使用——同步、异步、串行、并发的具体剖析

什么是GCD?全称是Grand Central Dispatch可译为 “牛逼的中枢调度器”纯C语言,提供了非常多强大的函数。GCD的优势GCD是苹果公司为多核的并行运算提出的解决方案GCD会自动利用更多的CPU内核(比如双核、四核)GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理的代码。

2015-10-21 14:35:27 1702 1

原创 自动释放池原理

autorelease:即延迟释放。自动释放池的作用:在程序执行完毕即池子即将销毁的时候会对池子中所有调用autorelease的对象进行一次release操作。面试题一:自动释放池什么时候创建,什么时候销毁?每一次运行循环执行后,也就是每当事件被触发时都会创建自动释放池。在程序执行的过程中,所有autorelease的对象在出了作用域之后会被添加到最近创建的自动释放池中。运行循环结束

2015-10-20 21:48:07 2965

原创 运行循环RunLoop原理剖析

GCD简介运行循环RunLoop即运行循环在IOS开发中几乎不用,但是概念的理解却非常重要。作用:保证程序不会退出。监听所有事件,例如:手势触摸,时钟触发(NSTimer),网络加载数据完成等。 没有事件时会休眠省电,一旦监听到事件,会立即响应。特性:每一个线程都有一个runloop, 但是只有主线程的runloop 会默认启动。runloop 本质就是一个死循环。代码模仿

2015-10-20 20:12:33 528

原创 多线程之线程间的通信——以及下载文件并保存到指定路径的方法

因为为了有良好的用户交互,都把耗时操作放到新的线程去执行。例如将图片下载(耗时操作执行完毕)后需要将下载的数据放到主线程中去执行,这是就需要线程间的通信。实例验证代码如下://// ViewController.m// 线程间通信//// Created by apple on 15/10/20.// Copyright (c) 2015年 LiuXun. All right

2015-10-20 17:44:23 499

转载 OC中的字母大小写转换

2015-10-07 09:14:29 1644

原创 多线程NSThread安全隐患与解除方法—— 利用加锁@synchronized(){}来解决

多线程的安全隐患。资源共享1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源。比如多个线程访问同一个对象、同一个变量、同一个文件。当多个线程访问同一块资源时,很容易引起数据错乱和数据安全问题。例如:存钱取钱的问题:如下图所示数据库中一个账户的余额是唯一的,假设有两个线程同时访问修改余额就会发生错误,例如:两个线程同时拿到余额值都为1000,第一个线程在

2015-10-05 21:41:03 1187

原创 多线程NSThread状态控制—— 新建、就绪、运行、阻塞、死亡几个状态

1、线程的状态NSThread *thread = [[Thread alloc] initWithTarget: self selector:@selector(run) object: nil];[thread start];知识点一:新建状态、就绪状态、运行状态在thread没有start之前alloc之后处于一个新建状态,进程会为其线程分配内存(把线程放入到内存中)

2015-10-04 12:04:46 2255

原创 多线程NSThread的简单创建和使用——创建线程的几种方式

一个NSThread对象就代表一条线程。创建、启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self selector: @selector(run) object: nil];[thread start];// 线程一启动,就会在线程thread中执行self的run方法主线程相关的方法+(NSTh

2015-10-04 09:49:38 546

原创 多线程概念的理解——代码验证之耗时操作练习

什么是进程?进程指在系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。比如同时打开QQ、Xcode,系统就会分别启动2个进程。在电脑里可以通过“活动监视器”查看Mac系统中所开启的进程。什么是线程?一个进程想要执行任务,必须得有线程(每一个进程至少要有1条线程)。进程主要是用于开辟空间,而真正执行任务的是线程。线程是进程

2015-10-03 22:40:07 2110

原创 UIPickerView组件的使用之随机点菜系统(一)——利用AutoResizing进行屏幕适配,拖线进行实现

新建工程,详细步骤省略。主要有以下几个步骤:步骤一:新建一个具有Simple View的工程,打开storyBoard。拖进组件,具体如下:为需要获取或修改其属性值的组件添加Qulet属性:如下所示:为显示菜单内容的UILabel组件设置Qulet属性当我在拖线为UILabel拖属性时托错了控件,后来发现修改起来也很容易,只需要点击拉措的组件右键取消

2015-10-03 12:01:13 1176

原创 正则表达式详解——NSRegularExpression类和NSPredicate类的使用

NSPredicate类 即谓词已将整理过了,在此主要总结学习过的专门用于正则表达式的类即 NSRegularExpression的使用。创建方法如下:+ (NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options

2015-10-02 21:37:03 3909

原创 OC 打印结构体的内容

OC结构体(如NSRect,NSSize,NSPoint等)类型的结构体变量不是对象,所以要想整体打印他们内容。必须事先把它们转换为OC字符串类型,常用的方法就是直接使用NSStringFromXxx...方法即可一、NSRagevoid range(){ NSRange range=NSMakeRange(8, 5); NSLog(@"location=%zi",rang

2015-10-02 21:12:08 2629

原创 谓词的补充——使用谓词还可以进行正则表达式的验证

NSPredicate 谓词的主要用于以下几个方面: (一)已知数组NSArray都有一个filteredArrayUsingPredicate方法,可以根据指定的NSPredicate对象进行内容过滤。(二) 除此之外Core Data框架中可以为查询请求NSFetchRequest类的对象指定NSPRedicate对象作为查询条件。(三)NSPredicate类还可以使用match

2015-10-02 16:49:31 511

原创 使用Block块取代代理功能——代码验证之自定义控件的实现

往常我们在自定义控件时,需要封装一些子控件。常常需要为其设置触发监听事件,但我们在定义控件的类中无法实现。为了解决此问题,我们利用了代理模式进行解决,主要步骤是:新建一个协议里面定义了实体类具体执行的方法。然后封装了一个自定义控件类,在类里设置了一个必须遵循协议的代理属性,当触发子控件的监听事件时就在事件方法内调用自身的代理来完成事先无法确定的操作即让代理执行协议中的方法。 发现过程过于繁琐。

2015-10-02 14:59:12 702

原创 IOS对象关系映射(ORM)之coreData框架的学习——(三)对使用步骤进行方法封装

为了方便以后使用。很有必要对实现细节进行一些封装。最后工程目录如下图:具体实现细节在(二)中已经详细介绍,在此不再多说。新建一个Author作者实体和一个Book实体。一个Book只有一个作者对象,一个作者有多个Book对象。即设置一对一和一对多的关系,详见如下图:新建文件  点击NSManagedObject SubClass, 让实体生成对应的模型类。如下图:

2015-10-02 13:04:15 1138

原创 IOS对象关系映射(ORM)之coreData框架的学习——(二)原理剖析及使用步骤详解

知识点一:Core Data数据持久化是对SQLite的一个升级,它是IOS集成的框架。它有几个类,大概简介如下:(1.1)NSManagedObjectModel(被管理的专门用来描述应用程序的数据模型)是包含一个或多个实体的模板,里面描述了实体间的关系。由实体(Entity),特性(Property),读取请求(Fetch Request)等。(1.2)NSManagedObjectC

2015-10-01 18:14:13 1090

原创 IOS对象关系映射(ORM)之coreData框架的学习——(一)基本使用

因为Core Data比较复杂,所以我就先学习其操作用法如下:1、新建工程,在工程根目录下新建文件或Command+n  在IOS下选择点击Core  Data,在右面选择Data Model新建实体模板具体如下图:2、在新建的实体模板内,新建实体。具体如下图:3、可以第二种风格进行编辑显示,如下图所示。4、为了添加数据库日志输出功能,具体如下图。

2015-10-01 09:55:40 1802

原创 IOS 之使用FMDB进行SQLite数据库操作——表的创建与修改,以及数据的增删改查和多线程操作数据库

因为IOS中的数据库API在使用上非常复杂繁琐,我们在对SQLite数据库进行操作时通常使用第三方封装的库FMDBFMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。FMDB常用类:FMDatabase:一个单一的SQLite数据库,用于执行SQL语句。FMResultSet:执行一个FMDatabase结果集。FMDatabaseQueue:

2015-09-29 20:45:57 3628

原创 使用全局变量的四种方式:extern、AppDelegate、定义单例对象、NSUserDefaults 和单例工厂的使用方法

知识点一、 众所周知,在很多地方都要用到全局变量,因为在一个地方声明赋值的过的对象成员或变量经常在别的地方被使用。例如在一个表示登录页控制器中的登录信息要在别的地方使用到,最常见的做法是别的控制器中也定义一个此变量属性,在跳转之前 对此变量属性进行赋值,这样做只能一对一的进行传递而且麻烦费事有很多弊端。最好的方法是定义一个全局变量——在一个地方赋值,在同一程序的任意地方都能获取到。经过总结发现,在

2015-09-29 10:21:37 3684

转载 #ifdef __cplusplus 有什么作用

/*一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。一般的考虑跨平台使用方法如下:#ifdefined(__cplusplus)||defined(c_plusplus) //跨平台定义方法extern "C"{#endif//... 正常的声明段#i

2015-09-29 09:13:07 701

转载 单例模式与单例工厂

单例模式什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要调用相关的函数也得经过它。学术一点就是,单例模式,为某一类需求和数据提供了统一的程序接口。主要的实现技术就是,确保全局只有一个对象的实例存在。举个例子把,比如NSNotificationCenter 中的 defaultCenter 负责全局的消息分发、NSFileManager 的

2015-09-28 14:14:31 1870

原创 alloc与allocWithZone的用法区别

一、问题起源一切起源于Apple官方文档里面关于单例(Singleton)的示范代码:Creating a Singleton Instance.主要的争议集中在下面这一段:static MyGizmoClass *sharedGizmoManager = nil; + (MyGizmoClass*)sharedManager { if (sharedGizmoManager ==

2015-09-28 11:16:00 1640

转载 SDWebImage 第三方框架的使用——网络图片的处理操作

这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。使用示范的代码:UITableView使用UIImageView+WebCache类(基本应用,UIImageView的一个category)前提#import导入UIImageView+WebCache.h文件,然后在tableview的cellFor

2015-09-28 09:36:42 971 1

ng-flow上传多张图片

ng-flow 上传多张图片

2016-08-14

CoreData 数据请求 以及下载的自封装方法

这是封装后的方法 连类名都不用写 导入调用函数名即可进行文件下载 数据请求 以及Coredata的使用

2015-10-19

UILabel分类——自动调整处理文章格式显示

当我们要在一个UILabel组件上显示指定文章格式和行间距 字体颜色或风格且高度不确定的文章时,只需要把该文件拉进工程。把头文件导入,即可让UILabel组件调用分类方法。任可要求均可满足。并且,还可以求出文章的具体高度。

2015-10-19

ios开发之SQLite数据库打开工具MesaSQLite

用于打开IOS客户端上的SQLite数据库

2015-10-19

传智播客PPT之 )—数据存取

对象的归档和解档 数据库的操作 以及Coredata的详细使用

2015-10-19

IOS第三方库大全

用于数据请求的第三方包ASIHttpRequest 用于创建组件约束进行屏幕适配的第三方包Masonry 用于显示缓冲或加载的动态组件第三方包MBProgressHUDFile 用于加密的第三方包MD5 用于上下拉刷新的第三方包MJRefresh第三方包 用于JSON解析的第三方包SBJson 用于图片缓存和下载的第三方包SDWebImageFile

2015-10-19

IOS开发项目源代码之 ArtPage

涵盖最全的第三方库 封装了IOS最高级最高级的技术 使开发IOS程序更加方便,

2015-10-19

空空如也

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

TA关注的人

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