
iOS进阶
众拾达人
如果你不改变什么,那什么都不会改变!
展开
-
iOS进阶_WebDav(三.HTTP状态码)
注意: 1xx代表信息 2XX代表成功 3XX代表请求重定向 4XX代表客户端错误 5XX代表服务器错误记住这些就可以了,剩下的具体错误,再去下面查看1xx消息这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户...原创 2018-05-23 11:48:36 · 1233 阅读 · 0 评论 -
iOS架构师_桥接模式
桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立的变化。 原理:抽象层与实现层相分离,抽象层定义了供客户端调用的抽象接口,实现层提供了具体的逻辑,实现类的引用被封装到抽象层的实例中,桥接就此形成。原始代码示例:首先创建两个类:XiaoMiRemote(小米遥控器) XiaoMiTV(小米电视)XiaoMiTV.h#import <Foundat...原创 2018-05-30 15:03:15 · 593 阅读 · 0 评论 -
iOS架构师_工厂模式
简单工厂:例子: 模式图 代码示例: 创建水果工厂类FruitsFactory再创建水果类Fruits,以及Fruits的子类Apple,Orange,BananaFruitsFactory.h#import <Foundation/Foundation.h>#import "Fruits.h"#import "Apple.h"#import "...原创 2018-05-30 17:30:34 · 1314 阅读 · 0 评论 -
iOS架构师_代理模式(代理和协议的区别)
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。UML示意图代理与协议的区别:代理原理:代码示例裁判需要知道r跑了多远的信息.创建Person类Person.h// 裁判要知道你得多快#import <Foundation/F...原创 2018-06-07 17:28:21 · 1867 阅读 · 0 评论 -
iOS架构师_享元模式
享元模式定义:相同的数据就拿来共享 1、可共享享元对象 2、享元池减少同一类对象的大量创建,减少节约了内存空间。使用范围:服务器端:查询火车票(共享对象) iOS端:多线程(线程池),UITableViewCell,UICollectionViewCellUML结构图代码示例创建工厂FlowerFactory类,并且创建类FlowerFlower.h...原创 2018-06-01 17:05:43 · 880 阅读 · 0 评论 -
iOS架构师_消息转发机制
1.动态方法解析对象在收到无法处理的消息时,会调用下面的方法,前者是调用类方法时会调用,后者是调用对象方法时会调用//未实现类方法调用+ (BOOL)resolveClassMethod:(SEL)sel//未实现实例方法调用+ (BOOL)resolveInstanceMethod:(SEL)sel在该方法中,需要给对象所属类动态的添加一个方法,并返回YES,表明可以处理...原创 2018-06-08 18:27:52 · 1994 阅读 · 0 评论 -
iOS核心动画CoreAnimation系统进阶(赛贝尔曲线-菜单侧滑动画拆分动画详解)
我们知道动画是基于绘制的,多次绘制贝塞尔的过程就会形成动画。流畅的动画效果会给用户带来不一样的使用体验,下面我们就让App开发中经常使用到的侧滑动画进行拆分详解。效果图如下:为侧滑动画封装一个slideMenuView 绘制侧滑动画需要下面几个步骤1.添加模糊背景#define menuBlankWidth 50#define menuBtnHeight 40#def...原创 2018-08-09 14:39:33 · 824 阅读 · 0 评论 -
iOS核心动画CoreAnimation系统进阶(点赞经典动画 CAEmitterLayer 粒子动画详解)
1.图片变了[_linkBtn setImage:[UIImage imageNamed:@"default"] forState:UIControlStateNormal]; [_linkBtn setImage:[UIImage imageNamed:@"select"] forState:UIControlStateSelected];2.大小变了:使用关键帧动画C...原创 2018-08-09 17:42:18 · 1372 阅读 · 0 评论 -
Objective-C实现链式编程语法(DSL)
您越着急开始写代码,代码就会花费越长的时间。 - Carlson, University of Wisconsin前言熟悉Objective-C这一门编程语言的人都知道,Objective-C中方法的调用都是通过中括号[]实现的。比如[self.view addSubview:xxxView];如果想要在一个对象上连续调用多个方法,就要使用多组中括号嵌套(当然要保证每个方法都能把该对象作为...原创 2018-08-09 18:15:36 · 472 阅读 · 0 评论 -
iOS核心动画CoreAnimation系统进阶(赛贝尔曲线绘制火柴人图形)
通过绘制经典的火柴人图形,练习赛贝尔曲线的绘制绘制火柴人图形1.首先绘制圆形-(void)shaperLayer{ UIBezierPath * path =[UIBezierPath bezierPath]; //首先绘制圆形 [path moveToPoint:CGPointMake(175, 100)]; //addArcWithCenter既...原创 2018-08-10 14:39:33 · 506 阅读 · 0 评论 -
iOS核心动画CoreAnimation系统进阶(仿QQ气泡拖拽效果)
拆分: 1.2个圆,一个固定,一个可移动-(void)setup{ //添加view1 _view1 =[[UIView alloc]initWithFrame:CGRectMake(36, CGRectGetHeight(self.view.bounds)-66, 40, 40)]; _view1.layer.masksToBounds = YES; ...原创 2018-08-14 10:14:12 · 1018 阅读 · 0 评论 -
iOS架构师_观察者模式
定义:观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式),一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。示例代码:自己实现观察者模式创建Protocol类型的接口文件SubProtocol协议类SubProtoco...原创 2018-06-06 10:38:56 · 244 阅读 · 0 评论 -
iOS架构师_认识设计模式
1.什么是设计模式?概念:为解决特定场景下的问题而定制的解决方案2.设计模式的基本原则接口隔离原则:接口里面只做必要的事情,不做其他相关的事情 需求:封装创建一个Button,但是按钮的尺寸由我自己控制创建一个baseViewBaseView.h#import <UIKit/UIKit.h>@interface BaseView...原创 2018-05-24 19:07:50 · 733 阅读 · 0 评论 -
iOS进阶_WebDav(四.WebDav的HEAD&DELETE)
GET 查 - 下载文件(不需要身份验证) POST 增 - WebDav不支持POST请求!! DELETE 删(不安全) - 删除服务器上的文件(需要身份验证) PUT 改(不安全) - 修改服务器上的文件(需要身份验证)HEAD 获取信息 - 获取文件信息(不需要身份验证)RESTful 设...原创 2018-05-23 14:39:16 · 932 阅读 · 0 评论 -
iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路)
WebDav的上传进度#import "ViewController.h"@interface ViewController ()&lt;NSURLSessionTaskDelegate&gt;/** 会话 */@property(nonatomic,strong)NSURLSession * session;@end@implementation ViewController...原创 2018-05-23 15:13:59 · 1671 阅读 · 0 评论 -
iOS进阶_Socket(Socket简介&代码演练)
网络通讯三要素TCP & UDP三次握手断开连接的四次握手Socket套接字了解了上面的概念,我们开始演练一下Socket#import "ViewController.h"#import <sys/socket.h>#import <netinet/in.h>#import <arpa/i...原创 2018-05-23 16:23:29 · 456 阅读 · 0 评论 -
iOS架构师_SDWebImage源码分析
1.对SDdemo的分析针对SD的3.8.2版本进行分析,因为从git上面直接下载SD的源码,项目运行会报错,缺少libwebp这个库,我们下载3.8.2版本,运行libwebp 是个webp的图片格式,属于谷歌的库,所以只能翻墙去国外的网站上去找,文章最后会给出libwebp的文件,webp格式的会压缩图片,使文件变小,节约用户流量缺失文件路径:/Users/mac/Deskto...原创 2018-06-04 10:47:28 · 1042 阅读 · 0 评论 -
iOS架构师—目录
1.认识设计模式,UML图建模,策略模式 2.MVC MVP MVVM 3.桥接模式 工厂模式 享元模式 4.SDwebImage 5.适配器模式 观察者模式 6.代理设计模式 消息转发机制 7.设计模式-构建者模式-中介者模式 8.设计模式-迭代器模式-组合设计模式 9.设计模式-责任链-模板模式 10.设计模式-命令-装饰-原型模式 11.设计模式-外观...原创 2018-05-23 16:55:47 · 811 阅读 · 0 评论 -
iOS架构师_适配器模式
适配器模式分为类适配器与对象适配器两种:适配器模式UML图类适配器:继承关系(被适配的类和类适配器是继承关系) 对象适配器:不是继承关系,是单向关联关系例子:美元转换为人民币创建被适配的类AdapteeUSDAdapteeUSD.h#import &lt;Foundation/Foundation.h&gt;// 要适配的一个对象@interfa...原创 2018-06-04 14:50:02 · 2480 阅读 · 2 评论 -
iOS架构师_代理模式(NSProxy)
我们通过NSProxyDemo案例来更进一步的了解代理模式创建AbstarctProxy类 AbstarctProxy.h#import <Foundation/Foundation.h>@interface AbstarctProxy : NSProxy// 代理属性@property (nonatomic, weak) id delegate;@end创...原创 2018-06-11 16:16:35 · 1058 阅读 · 0 评论 -
iOS架构师_策略模式
什么是策略设计模式? 概念:定义一系列的算法,并且将每个算法封装起来,算法之间还可以互相替换。这种设计模式称为策略模式。为了解决if-else和switch-case的问题,在实际开发中,较长的if-else会使代码阅读困难。代码示例:下面是一个简单的if-else代码#import "ViewController.h"typedef NS_ENUM(NSInteger) {...原创 2018-05-29 11:57:00 · 1647 阅读 · 0 评论 -
iOS架构师_架构模式(代理,block,通知,MVC,MVP,MVVM)
1.什么是架构?没有明确的定义,属于设计的一方面,没明确的把设计和架构进行区分,它可以小到类与类之间的交互,大到不同模块之间,以及不同业务之间的交互,都可以从架构的层面去理解它。所有架构和设计模式的目的都是为了解耦合2.基本的架构基础 案例需求:女朋友让男朋友去做饭,完了以后给抱抱GirlFriend类 .h#import &lt;Foundation/Foun...原创 2018-05-29 16:21:48 · 2073 阅读 · 0 评论 -
iOS架构师_构建者模式
UML图时序图 代码示例:创建构建者协议类Builder#import &lt;Foundation/Foundation.h&gt;// 构建者@protocol Builder &lt;NSObject&gt;// 构建部分- (NSString *)builderPart;@end创建具体生成者类ConcreteBuild ConcreteBu...原创 2018-06-12 18:35:58 · 545 阅读 · 0 评论 -
iOS核心动画CoreAnimation系统进阶—目录
核心动画之图层详解核心动画之基础动画核心动画之关键帧动画核心动画之转场动画核心动画之动画组核心动画之物理仿真动画核心动画之性能调优...原创 2018-08-06 14:45:50 · 350 阅读 · 0 评论 -
iOS核心动画CoreAnimation系统进阶(子图层:富文本+渐变+3D)
CATextLayer富文本图层#import &lt;CoreText/CoreText.h&gt;//富文本图层-(void)textLayer{ CATextLayer * textLayer =[CATextLayer layer]; textLayer.frame = CGRectMake(100, 400, 200, 50); textLayer...原创 2018-08-10 17:33:33 · 692 阅读 · 0 评论 -
iOS进阶—Runtime:OC方法底层调用过程
GitHub参考PS:参考GitHub分享的Runtime002代码iOS进阶—目录OC方法底层调用过程如果查看OC的底层调用过程,我们需要借助clang工具使用终端cd 项目目录clang -rewrite-objc main.m会生成一个main.cpp文件添加进项目当中,注意不要选择编译选项,如下图我们查看main.cpp文件当中main函数的实现我们把其中关...原创 2018-11-16 15:33:26 · 835 阅读 · 0 评论 -
iOS进阶—Runtime源码解析:消息发送
GitHub参考PS:参考GitHub分享的objc-runtime-master代码iOS进阶—目录1、OC中的方法调用,实际上objc_msgSend函数调用2、objc_msgSend的执行过程大致可以分为三个部分:消息发送动态方法解析消息转发RunTime是开源的,所以我们可以方便的查看到RunTime的源码(可参考Github),底层主要运用的语言包含汇编语言,C/...原创 2018-11-16 18:11:07 · 418 阅读 · 0 评论 -
iOS进阶—Runtime源码解析:动态方法解析
GitHub参考PS:参考GitHub分享的objc-runtime-master代码iOS进阶—目录原创 2018-11-19 11:44:27 · 1200 阅读 · 1 评论 -
iOS进阶—Runtime源码解析:消息转发
GitHub参考PS:参考GitHub分享的objc-runtime-master代码,及Runtime005代码iOS进阶—目录runtime源码中消息转发相关代码// No implementation found, and method resolver didn't help. // Use forwarding. imp = (IMP)_objc_msgForwar...原创 2018-11-19 15:36:43 · 1234 阅读 · 0 评论 -
iOS进阶_KVC(基本使用&KVC赋值取值过程分析&KVC自定义&异常处理)
KVC(Key-value coding)键值编码基本使用实例:WTPerson.h#import &amp;lt;Foundation/Foundation.h&amp;gt;@interface WTPerson : NSObject{// @public //@protect默认 NSString * _name;}/** name **///@property(n...原创 2018-12-07 17:26:32 · 1390 阅读 · 1 评论 -
iOS进阶_KVC(进阶使用)
1、KVC与字典//KVC与字典-(void)dictionaryTest{ WTPerson * p = [WTPerson new]; NSDictionary * dict = @{ @&quot;name&quot;:@&quot;wt&quot;, @&quot;age&原创 2018-12-12 18:17:01 · 508 阅读 · 0 评论 -
iOS自动化布局-AutoLayout约束优先级
约束的优先级AutoLayout添加的约束中也有优先级(Priority),优先级的数值1~1000,分为两种情况:一种情况是我们经常添加的各种约束,默认值1000(最大值)优先执行,条件允许的话系统会自动满足我们的约束需求。第二种就是固有约束(intinsic content size)严格说这种更像UILabel和UIButton的一种属性,但是在Autolayout中需要满足属性取值...原创 2018-12-03 18:29:31 · 2195 阅读 · 0 评论 -
iOS架构-组件化(项目框架搭建)
组件化设计方案方案1.静态库方式 + Carthage方式方案2.第三方管理工具CocoaPods方式、Carthage方式组件化设计应用1、项目开发需求:业务分层四层(示例项目分四层,很多主流项目也是这么分层的)网络层:NetworkLayer(组件一)-&amp;gt; 静态库-&amp;gt;.a文件业务层:BusinessLayer(组件二)-&amp;gt; 静态库-&amp;gt;.a文件数据原创 2019-02-13 10:27:33 · 1052 阅读 · 0 评论 -
iOS架构-组件化(Carthage管理工具)
一、Carthage项目管理工具使用?Step 1:安装/更新Homebrew工具1、/usr/bin/ruby -e &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&amp;quot;2、brew install carthage3、brew link carthage4、brew ins...原创 2019-02-22 10:17:38 · 1143 阅读 · 0 评论 -
iOS架构-组件化(项目框架搭建2)
静态库引用静态库如果像上图一样,直接在业务层组件引用数据层组件的文件,则会报错,因为组件之间没有建立引用关系。如下图静态库如何引用Pods第三方库拷贝Podfile文件到项目,打开终端执行pad install直接引用Pod下面的YYModel,项目会报错配置第三方库层级调用1.网络基础库结构2.网路层和业务层(调用关系)-&gt;交互3.业务分层结构4.U...原创 2019-02-14 11:32:07 · 1631 阅读 · 1 评论 -
iOS进阶—Runtime基础
iOS进阶—目录GitHub参考RunTime 基础一个程序的执行过程,大概就是代码->编译链接->执行C语言#import <Foundation/Foundation.h>void run() { NSLog(@"%s", __func__);}int main(int argc, const char * argv[]) { @aut...原创 2018-11-16 14:42:50 · 445 阅读 · 0 评论 -
iOS-构建SDK(从无到有)
上一篇文章中,我们使用OpenCV封装了图片马赛克话的代码iOS音视频—OpenCV初体验马赛克的实现,现在我们利用它来构建一个SDK。A、关于静态库和动态库静态库:.a和.framework ,动态库:.dylib和.framework。.framework可静可动,取决于你的配置,详见后面过程。我们做SDK的目的其实主要那么几个,解耦,给别人用又不想别人看见我们的源码。我们做S...原创 2018-09-12 15:21:16 · 711 阅读 · 0 评论 -
iOS核心动画CoreAnimation系统进阶(2D物理引擎)
iOS7前是拟物化,扁平化。iOS7以后交互动画:拟真效果目前知名的2D物理引擎有 Box2d,和Chipmunk,这些是跨平台的。但苹果本身也封装了一个物理引擎, UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架。这可以让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果。在游戏开发中会经常用到。本文主要是玩一些较浅的功能,就不说那些游戏中框架中的高级用法...原创 2018-08-14 14:15:14 · 651 阅读 · 0 评论 -
iOS开发 多线程的高级应用-信号量semaphore
在iOS开发的道路上,多线程的重要性不言而喻. 大部分我们都停留在基础的使用上面.缺乏高级应用. 缺乏提升,是因为我们面对他太少,复杂的事情重复做,复杂的事务基础化. 差距就是这样拉开了言归正传: 今天讲讲GCD的高级应用之信号量篇一, 信号量的本质: 信号量的本质是数据操作锁, 它本身不具有数据交换的功能,而是通过控制其他的通信资源来实现进程间通信,它本身只是一种外部资源的标识。信号量...原创 2018-08-07 10:00:21 · 1282 阅读 · 0 评论 -
知识贴 | iOS 开发中 runtime 常用的几种方法
一、runtime 简介runtime 简称运行时,是系统在运行的时候的一些机制,其中最主要的是消息机制。它是一套比较底层的纯 C 语言 API, 属于一个 C 语言库,包含了很多底层的 C 语言 API。我们平时编写的 OC 代码,在程序运行过程时,其实最终都是转成了 runtime 的 C 语言代码。如下所示:// OC代码:[Person coding];//运行时 run...原创 2018-08-07 11:26:12 · 383 阅读 · 0 评论