- 博客(53)
- 收藏
- 关注
原创 iOS 设计模式 - 观察者模式
观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是MVC(模型-视图-控制器)模式的重要组成部分。一、使用步骤二、基本属性如何抽象接口 对订阅对象的约束 针对接口编程对象持有的问题 用NSHashTable实现weak引用 参数的严格验证三、代码示例1.自己写的观察者模式https://github.com/shileseal/SLObserverDe
2016-02-26 21:52:27 320
原创 iOS 设计模式 - 迭代器模式
迭代器模式提供了一种顺序访问集合对象中元素的方法,而无需暴漏结构的底层表示和细节。 遍历集合中元素的职能从集合本身转移到迭代器对象。 迭代器定义了一个用于访问集合元素并记录当前元素的接口。一、使用步骤二、基本属性1.基本作用最少知识原则:需要访问组合对象的内容,而又不暴漏其内部表示。 通过多种方式遍历组合对象。 提供一个统一的接口,用来遍历各种类型的组合对象。2.NSEnumerator基础
2016-02-26 21:51:47 352
原创 iOS 设计模式 - 组合模式
将对象组合成树形结构以表示“部分–整体”的层次结构。 组合模式使得用户对单个对象和组合独享的使用具有一致性。组合模式UML 一、使用步骤二、基本属性三、代码示例1.树形结构https://github.com/shileseal/SLBinaryTreeDemo2.组合模式https://github.com/shileseal/SLCompositeDemo3.编写文件夹系统https://g
2016-02-26 21:51:14 806
原创 iOS 设计模式 - 生成器模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一、使用步骤二、基本属性三、代码示例1.生成器模式https://github.com/shileseal/SLBuilderDemo2.制造汽车流程https://github.com/shileseal/SLBuilderCarDemo四、总结
2016-02-26 21:50:24 326
原创 iOS 设计模式 - 备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态。 保存的是状态而不是对象本身。 一、使用步骤二、基本属性三、代码示例1.备忘录模式https://github.com/shileseal/SLMementoDemo2.优化存储方案https://github.com/shileseal/SLMementoStoreDemo3.恢
2016-02-26 19:18:48 649
原创 iOS 设计模式 - 策略模式
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
2016-02-26 11:06:41 331
原创 iOS 设计模式 - 适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
2016-02-26 09:53:16 333
原创 iOS 设计模式 - 命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。
2016-02-25 23:02:12 869
原创 iOS 设计模式 - 代理模式
改变响应链,降低耦合度一、使用步骤1.你要明确你的协议名称,一般来讲名称都是:控件类名 + Delegate2.代理方法中一般都是声明为@optional(程序默认情况下是@required)3.代理方法名一般以控件开头4.代理方法至少有一个参数@classCustomer;@protocol CustomerDelegate <NSObject>@required- (void)customer
2016-02-25 10:41:47 348
原创 iOS 设计模式 - 单例模式
有些任务只能有一个实例,比如打印任务,比如一些资源管理器UML图 一、使用步骤1.写法一(1)防止子类继承(2)确保实例对象只出现一个staticSLManager *center;@implementation SLManager+ (instancetype)defaultManager { //只创建一个实例 staticdispatch_once_t predicate;
2016-02-25 10:37:58 265
原创 iOS 第三方库 - ReactiveCocoa
https://github.com/ReactiveCocoa/ReactiveCocoa 在我们iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用不同的方式来处理。 比如按钮的点击使用action,ScrollView滚动使用delegate,属性值改变使用KVO等系统提供的方式。 其实这些事件,都可以通过RAC处理 ReactiveCocoa为事件提供了很多处理
2016-02-24 23:17:59 460
原创 iOS 第三方库 - Masonry
https://github.com/SnapKit/Masonry Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局。 简洁明了,并具有高可读性。 同时支持 iOS 和 Max OS X。
2016-02-24 23:17:36 293
原创 iOS 第三方库 - MJRefresh
https://github.com/CoderMJLee/MJRefresh 用法简单的下拉刷新框架:一行代码搞定 UIScrollView、UITableView、UICollectionView、UIWebView
2016-02-24 23:17:14 340
原创 iOS 第三方库 - MJExtension
https://github.com/CoderMJLee/MJExtension MJExtension是一套字典和模型之间互相转换的超轻量级框架 只需要一行代码,就能实现模型的所有属性进行Coding(归档和解档) JSON –> Model、Core Data Model JSONString –> Model、Core Data Model Model、Core Data Mode
2016-02-24 23:16:54 721
原创 iOS 第三方库 - FastCoding
https://github.com/nicklockwood/FastCoding 序列化是把对象转化成字节序列的过程 反序列化是把字节序列恢复成对象 FastCoder 是一个高效的二进制序列化格式,用于存储 Cocoa 对象的.它被设计用来替换 NSPropertyList, NSJSONSerializer, NSKeyedArchiver/Unarchiver 以及 Core Dat
2016-02-24 23:16:22 1110
原创 iOS 第三方库 - MBProgressHUD
https://github.com/jdg/MBProgressHUD 一、使用步骤1.下载MBProgressHUD,导入工程。2.在需要的地方导入头文件。#import <MBProgressHUD/MBProgressHUD.h>3.使用HUD(1)主线程让HUD旋转,开启子线程处理长时间的任务。[MBProgressHUD showHUDAddedTo:self.view animat
2016-02-24 22:34:21 361
原创 iOS 第三方库 - SDWebImage
https://github.com/rs/SDWebImage 图片缓存,处理大量的图片一、使用步骤1.下载SDWebImage,导入工程。2.在需要的地方导入头文件#import "UIImageView+WebCache.h"3.调用sd_setImageWithURL:方法缓存图片(1)sd_setImageWithURL: //图片缓存的基本代码,就是这么简单 [self
2016-02-23 23:23:44 292
原创 iOS 第三方库 - FMDB
https://github.com/ccgus/fmdb 对SQLite API进行封装的库一、使用步骤1.在FMDB下载文件后,工程中必须导入FMDB的库,并使用 libsqlite3.dylib 依赖包。FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。2.创建数据库db = [FMDatabase databaseWithPath:database_path
2016-02-23 23:18:00 277
原创 iOS 网络 - AFNetworking 3.0
弃用的类 下面的类已从AFNetworking 3.0中废弃: AFURLConnectionOperation AFHTTPRequestOperation AFHTTPRequestOperationManager修改的类 下面的类包含基于NSURLConnection的API的内部实现。他们已经被使用NSURLSession重构: UIImageView+AFNetworking
2016-02-23 17:03:35 693
原创 iOS 网络 - NSURLSession
NSURLSession提供的功能: 1.通过URL将数据下载到内存; 2.通过URL将数据下载到文件系统; 3.将数据上传到指定的URL; 4.在后台完成上述功能. 5.支持下载,断点续传,后台上传/下载,后台上传/下载任务跟进一、使用步骤 1. 定义一个NSURLRequest NSString *urlString = @”http://imgs.soufun.com/n
2016-02-23 17:03:13 357
原创 iOS 多线程 - GCD
Grand Central Dispatch,“牛逼的中枢调度器”,纯C语言,提供了非常多强大的函数。 GCD是多核并行运算解决方案 ,自动利用更多的CPU内核(比如双核、四核),会自动管理线程的生命周期(创建线程、调度任务、销毁线程) 一、使用步骤 GCD中有2个核心概念 (1)任务:执行什么操作 (2)队列:用来存放任务 GCD的使用就2个步骤 (1)定制任务 (2)确定想做
2016-02-23 17:02:47 300
原创 iOS 多线程 - NSOperation
有限的自动化多线程。一、使用步骤 1.先将需要执行的操作封装到一个NSOperation对象中 2.然后将NSOperation对象添加到NSOperationQueue中 3.系统会自动将NSOperationQueue中的NSOperation取出来 4.将取出的NSOperation封装的操作放到一条新线程中执行二、基本属性 1.并发数 并发数设置在5以内,一般为2~3,子线程过多
2016-02-23 17:02:20 430
原创 iOS 多线程 - NSThread
主线程要负责UI和响应事件,不能受复杂任务拖慢,需要使用多线程。多线程编程方法: 1.Thread :是三种方法里面相对轻量级的,但需要管理线程的生命周期、同步、加锁问题,这会导致一定的性能开销 2.NSOperation:以面向对象的方式封装了需要执行的操作,不必关心线程管理、同步等问题。NSOperation是一个抽象基类,iOS提供了两种默认实现:NSInvocationOperation
2016-02-23 17:02:04 258
原创 iOS 数据存储 - Core Data
Core Data不仅是一个加载、保存数据的O/RM框架,它还能和内存中的数据很好的共事。 1, Managed Object Model Managed Object Model 是描述应用程序的数据模型,这个模型包含实体(Entity),特性(Property),读取请求(Fetch Request)等。 2,Managed Object Context Managed Object C
2016-02-23 17:01:42 549
原创 iOS 数据存储 - SQLite3
纯C语言,占用资源非常的低,处理速度快,用于处理大批量数据的存储数据库存储数据的步骤? 1)新建一张表(table) 2)添加多个字段(column,列,属性) 3)添加多行记录(row,record,每行存放多个字段对应的值)一、使用步骤 1.首先要添加库文件libsqlite3.tbd和导入主头文件import
2016-02-23 17:01:18 363
原创 iOS 数据存储 - NSKeyedArchiver
plist:只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦 NSUserDefaults:将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息 归档:前两者只能存储常用的类型,而归档可以实现把自定义的对象存放在文件中一、使用步骤 1.如果想将一个自定义对象保存到文件中必须实现NSCoding协议 - (void)encodeWithCoder:(NSCoder
2016-02-23 17:00:56 289
原创 iOS 数据存储 - NSUserDefaults
每个应用都有个NSUserDefaults实例,通过它来存取偏好设置。比如,保存用户名、密码、字体大小、是否自动登录。一、使用步骤 1.获取NSUserDefaults对象 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];2保存数据(如果设置数据之后没有同步, 会在将来某一时间点自动将数据保存到Preferences文
2016-02-23 17:00:37 258
原创 iOS 数据存储 - Plist
属性列表是一种XML格式的文件,拓展名为plist 如果对象是NSString、NSDictionary、NSArray、NSData、 NSNumber等类型,就可以使用writeToFile:atomically:方法 直接将对象写到属性列表文件中。沙盒 应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件 Documents:保存应该运行时生成的需要持久化的数据,iTune
2016-02-23 17:00:16 318
原创 iOS QuartzCore - Core Animation
后台操作的,不会阻塞主线程 直接作用在CALayer上的,并非UIView一、使用步骤 1.基础动画 1创建核心动画 CABasicAnimation *anima=[CABasicAnimation animation];1.1告诉系统要执行什么样的动画anima.keyPath=@"position";//设置通过动画,将layer从哪儿移动到哪儿anima.fro
2016-02-23 16:59:49 226
原创 iOS QuartzCore - CALayer
在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 @property(nonatomic,readonly,retain) CALayer *layer; 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上。UIVie
2016-02-23 16:59:28 343
原创 iOS QuartzCore - 2D绘图
图形上下文(Graphics Context):CGContextRef类型的数据,保存绘图信息、绘图状态 绘图流程: 绘制好的图形先保存到图形上下文,后显示到输出目标一、使用步骤 1.绘图 UIGraphicsBeginImageContextWithOptions( CGSizeMake(200, 200), NO, 0); //1.获取bitmap上下文 CG
2016-02-23 16:59:08 365
原创 iOS UIKit - 通知机制
通知机制的5中方式: Target/Action Delegation NSNotification KVO Block 一、使用步骤 1.Target/Action [self.btn addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];} -(voi
2016-02-23 16:58:29 373
原创 iOS UIKit - 键盘处理
点击return或者键盘外部之后,处理键盘消失 键盘出现时,避免键盘遮住输入框一、使用步骤 (1)处理键盘消失 1. 通过UITextFiledDelegate,来释放第一响应者 (resignFirstResponder); 这种通过delegate释放键盘的代码如下: - (BOOL)textFieldShouldReturn:(UITextField *)textField {
2016-02-23 16:57:55 386
原创 iOS UIKit - 手势处理
UIGestureRecognizer 的子类,开发者可以直接使用他们进行手势操作。 UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer(捏合) UIRotationGestureRecognizer(旋转) UITapGestureRecognizer(点按,离散型手势,特点就是:一旦识别就无法取消,而且只会调用一次手势操作事件(初始化手
2016-02-23 16:57:35 554
原创 iOS UIKit - TabBarController
数组。 管理多个控制器,完成控制器之间的切换。一、使用步骤 1.storyBoard创建2.代码创建 (1)创建UIWindow self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];(2)初始化UITabBarController UITabBarController *
2016-02-23 16:56:32 275
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人