自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rv0p111

学习的脚步

  • 博客(45)
  • 收藏
  • 关注

原创 ios中的__kind of

一般来说__kindof这个关键字都是用在方法的返回值,这样做的好处其实就是在于方法的返回值可以是其本身也可以是它的子类,首先我们去创建个Person类@interface Person : NSObject+(id)person;@end然后再去创建个Man类#import "Person.h"@interface Man : Person@end这两者的.m文件都是没有

2017-12-31 09:31:06 619

原创 RAC-bind的实现浅析

简单的先附上一段代码,这里就是给subject取绑定一个信号,然后subject去发送数据之后可以在^RACSignal * (id value, BOOL *stop)这个block进行处理,然后之后返回的话就返回[RACReturnSignal return:value]; 以处理完数据包装成一个信号,然后下面的bindSignal收到的就是我们处理过的数据了 //1.创建信号

2017-12-31 07:47:00 533

原创 RAC中的宏浅析

讲道理刚刚学RAC的时候点击宏进去的话其实是一脸懵逼的,然后自己看了下又看了几篇文章也有了一定的了解现在就简单的介绍下。一样的从@weakify着手,我们点击进去会看到下面的代码,其中关于rac_keywordify是在我的同类的文章中讲过,这里就不介绍了,这里主要想记录下metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__)//

2017-12-29 20:23:07 638

原创 RAC中的@weakify和@strongify浅析

其实如果我们打开Xcode中查看预编译之后宏被替换的结果我们就会发现@weakify(self)被替换成了下面这个@autoreleasepool {} __attribute__((objc_ownership(weak))) __typeof__(self) self_weak_ = (self);其实如果我们去查看下自己写的解决循环引用的代码,会然后查看下预编译之后的结果其实和上面的是一

2017-12-29 16:42:28 1555

原创 RAC的基本使用

RAC其实可以帮我们做的事情很多很多,而且也很简单,并且代码和流水线一样这样下来也很好的阅读,能把业务逻辑放到一块进行处理,接下来就来简单的介绍下这里使用的版本是ReactiveObjC 3.0.0的版本1、代替代理,比如说我们想让按钮的点击事件本来在A.m中做的处理,想要在B.m中收到,其实我们用代理,当然用了RAC的时候就会更加简单,就比如说blueView里面有button,

2017-12-28 13:08:13 962

原创 Masonry浅析

首先我们可以先写下最常用的代码 [btn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.top.equalTo(@10);        make.right.bottom.equalTo(@10);}点进这个方法mas_makeConstraints,我们会看到下面的这样的代码,先

2017-12-26 06:58:03 271

原创 RAC浅析

什么是RAC? 其实RAC全称ReactiveCocoa,是GitHub上面一个开源的项目,其实RAC的整体的思想就是函数响应式编程。为什么这么说就好比是这样的有三个变量a,b,c,如果先前我们给a赋值为2,b赋值为1,这个时候如果我们让c=a+b,c是为3,但如果我们这个时候去改变a的值为1,这个时候c的值是不会改变的,所以其实RAC就可以帮我们做类似的事情就是如果我们a改变了,c也会改

2017-12-25 23:05:12 335

原创 备忘录模式浅析

其实备忘录模式就是在不破坏封装的前提下,去捕获一个对象的内部的状态,并在这个对象之外去保存这个状态,这样的话之后就可以把这个对象恢复到原先保存的状态。备忘录模式在很多软件中都有用到,因为现在很多软件都可以有撤销操作,其实就是把先前的某个状态去记录下来了。就好比在有些游戏中,在你退出游戏,你原本所处的状态其实和你再重新进入游戏的状态是一样的,这其实就是做了一个存储。备忘录模式其实就是将要保存

2017-12-24 12:51:26 296

原创 外观模式浅析

外观模式(门面模式):其实就是通过包装,我们可以在外界去调用统一的接口,可以这么说在外面我们所能看到的是外观对象,而不会看到里面的实际的操作,和里面的对象,这样的话其实就是让我们的代码更加好阅读,以及增强了可维护性。外观模式的基本概念就是要求一个子系统的外部和其内部的通信必需通过一个统一的对象进行也就是门户 外观模式提供了一个高层次接口,使得子系统更易于使用 就好比我们如果要把很多...

2017-12-24 09:27:46 314

原创 ios-信任服务器证书

当我们使用https去进行网络请求的时候,都会收到服务器给我们的证书,而这些证书有分为机构认证的证书,也有是自己签发的证书。在ios中如果我们是去请求的有机构认证的去发送https的请求,就不需要去做处理,但是如果是自签证书,我们必须要去做处理,否则的话是拿不到数据的。所以我们需要在一个代理方法中进行处理//首先创建Session NSURLSession * session

2017-12-22 19:53:01 1230

原创 原型模式浅析

其实在日常的开发中,对于有一些对象的创建会很复杂,而如果这个时候我们要去创建一个和之前我们创建的对象几乎一样的对象,而且只有轻微的变动的话,其实我们就可以用原型模式来做,从这个原型对象中拷贝出来。其实总的概念就是让原型对象让它生成自己的复制品,就可以节省创建它们的大量的时间和精力,因为这样比创建各种跟父类差异很少的独立的类来说,这样的方法可复用性高,并且好维护。原型模式的主要思想其实就是基

2017-12-22 08:22:36 239

原创 装饰模式浅析

基本概念装饰模式是动态的给一个对象添加一些额外的职责,相对于扩展功能来说,装饰模式比生成子类更加灵活。其实它的思想就在于向对象中去添加行为,而不去破坏其原有的风格,也就是说增加了新功能的对象是同一个类的加强版,就好比一张照片,我们给它增加了一个相框,任何增强的功能都可以进行动态的添加或者删除,因为相框其实本身就可以删除,这就是装饰。装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其...

2017-12-22 06:11:08 304

原创 模板方法模式浅析

模板方法模式的话其实就是好比我们在做各种各样的汉堡的时候,有鸡肉汉堡,牛肉汉堡等等,那么其实做汉堡的步骤的话都有需要准备面包啊,要什么沙拉酱啊还是番茄酱啊,这些通用的步骤其实是有的,这样的步骤其实就可以被称之为是模板方法,因为我们在做其他的一些汉堡的时候其实去修改的调用这些方法就可以了。模板方法可以使子类可以不改变一个算法的结构就可以去重定义该算法的某些特定步骤。模板方法模式的思想其实就是

2017-12-20 11:46:30 215

原创 责任链模式浅析

责任链模式的话其实就是使多个对象都有机会去处理请求,这样可以避免请求的发送者和接受者之间的发生耦合,这个模式是将这些对象去连成一条链,并且沿着这条链去传递请求,直到有一个对象可以去处理这个请求。这样的好处就在于发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这这样我们就可以在不影响客户端的情况下去重新组织和分配责任。责任链模式的主要的思想其实就是一个对象引用了同一类型的另

2017-12-19 21:44:59 260

原创 ios-NSURLConnection多线程下的问题

首先先介绍下它的几个方法和一些基本的概念,当我们去使用了下面的代码区创建连接发送请求的时候,其实下载操作是在主线程中执行的 NSURLConnection * conn = [NSURLConnection connectionWithRequest:request delegate:self]; //4.启动连接 [conn st

2017-12-19 19:07:11 441

原创 组合模式浅析

组合模式的概念其实就是将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性,因为组合模式其实就是不想让客户端知道它是在处理那些类型的节点。组合模式可以把相同基类型的对象组合到树状的结构中,所以其中的父节点是包含同类型的子节点。”部分-整体“的层次结构其实就是包含对象得到组合又包含了叶节点也就是单个对象的一种层级结构。因为每个组合或者是叶子

2017-12-17 20:29:12 206

原创 迭代器模式浅析

首先还是官话,迭代器提供了一种顺序访问聚合对象中元素的方法,而不用去暴露结构的底层表现和细节。迭代器定义了一个用于访问集合元素并记录当前的元素的接口。不同的迭代器可以去执行不同的迭代的策略。迭代器模式的缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。在迭代器模式中有四个角色我们需要知道的1、

2017-12-17 15:38:46 342

原创 证书的格式以及证书的知识点

在ios中是不能去使用PEM格式的证书的,而OpenSSL默认生成的都是PEM格式的证书在ios开发中需要用到的是DER格式的证书也就是二进制编码格式的,而PEM则是Base64编码格式的.der文件一般是包含公钥和一些其他的信息以.p12为后缀的证书中包含私钥、公钥及其证书,还有就是我们导出.p12文件的时候要去设计一个密码.csr结尾的是一个证书请求文件,我们如果要

2017-12-16 19:59:51 403

原创 ios-手动实现KVO简单版

知道KVO的实现原理的应该都知道,其实在我们去设置监听对象的属性的时候,对象的类会在运行时被改变,改成系统生成的一个类,会在这个子类中重写被观察属性的方法,当然也会去调用原本属于那个类中的set方法。关于KVO的实现可以详细请看http://blog.csdn.net/zcmuczx/article/details/78620680所以我们当然也可以利用runtime来进行模拟这个过程,下

2017-12-15 23:28:45 1159

原创 中介者模式

基本概念在面向对象的设计中是鼓励把行为分散到不同的对象中的,虽然把行为分散到不同的对象之间能增加复用性,但是这样的话可能会导致对象与对象相互关联的越来越多,这样的话就会使对象很难在不依赖对象的情况下独立工作,而且由于行为分布于多个对象,如果我们要去修改某个行为的话可能就很难的去修改,这样的话我们去创建的类就会越来越多,通过这样的方式去支持应用程序的新行为。中介者模式的话其实就是让对象的交互...

2017-12-15 19:57:28 259

原创 建造者模式(构建者模式)

简单介绍建造者模式的话其实就是将一个复杂对象的构建与它的表示分离,可以使得同样的构建过程可以有不同的表示,就好比吃套餐,KFC,麦当劳,华莱士其实套餐中变来变去就那些东西,但是不同的组合起来就是不一样的套餐,建造者模式其实就是分离了组件的构造过程,建造者模式其实是着重于一步步得构造出复杂对象。因为我们创建对象其实就是一个过程。抽象工厂模式着重于多个系列的产品对象。角色划分在建造者模式中...

2017-12-15 07:09:55 385

原创 加密算法知识点

首先在Mac上其实是自带了OpenSSL库,OpenSSL提供了很多的加密算法,我们在终端中可以用OpenSSL提供的加密算法指令来使用,当然我们也可以去通过调用OpenSSL提供的API来使用。这里介绍下enc指令的作用,OpenSSL提供了很多的对称加密算法指令,enc就是把这些加密算法指令统一集成到enc指令中。当用户使用时,只需使用enc,指定加密算法,就是完成了单独的加密算法指令完成的操...

2017-12-14 20:22:27 425

原创 ios-处理登录

一般来说我们都是把登录账号的业务逻辑放在一个网络请求工具类中进行的,我们可以在这个工具类中去写网络处理的代码,以及我们一般来说用户登录过一次之后的话,我们肯定要去把账号给存储起来,这样的业务处理我们都可以在这个工具类中进行,这样就方便外面的调用了。一般来说这样的网络工具类我们都是要去构建一个单例对象,这样的话就可以不用去进行重复创建这样的一个对象。然后在保存完账号信息的时候,其实我们之后如果退出了

2017-12-14 17:02:46 270

原创 ios-NSProxy模拟多继承

在网上也看到了个例子是模拟多继承的,大致的应用场景是这样的,如果我们目前有一个类A,还有一个类B,类A有父类,类B也有父类,然后现在我们要完善的功能就是要集合A中的功能以及B中父类的功能,如果有多继承,我们完全可以直接让A类继承自它原本的父类以及B类的父类就可以了。但是在OC中是没有多继承的,所以无法这么做,如果我们要去修改A的父类或者A的类的话太麻烦了,所以这个时候我们就可以用NSProxy来模

2017-12-13 18:39:42 609

原创 ios-NSProxy

NSProxy其实这个类可以称之为基类,这个类的属性和方法都很少,利用这个类可以实现我们的代理模式,我们也可以用它来实现一个"多继承",当然这个多继承不可能像C++,java那样,而是通过一个消息转发机制来实现的。我们可以用它来做一下消息转发。来模拟下代理的实现。首先创建一个抽象类继承自NSProxy,在这个抽象类中我们有代理属性delegate,然后在这个抽象类中我们实现了两个方法做了相应的

2017-12-13 16:18:43 337

原创 ios-消息转发机制

关于消息转发机制可能用到的也不是很多,但是在这里也记录下,它的几个用法。如果我们想让一个类没有实现的方法想让另一个类去做,其实就要用到消息转发的机制了。就好比我们有一个Person类,如果这个类声明了eat方法但是没有去实现这个eat方法,然后我们在创建一个Person类对象的时候,然后去调用eat方法,程序毫无疑问会崩溃。关于消息转发首先有几个方法我们需要去知道的就是下面的这几个方法

2017-12-13 12:30:16 324

原创 代理模式

在实际开发中我们肯定回去用到代理模式,其实代理模式就是比如说我们定义了协议,有一个A对象。A想让B干什么事情,并且要干的事情是我这个协议里面的内容,那么要干这个事情的对象B肯定要去遵守这个协议,并且在A中要拥有这个对象,其实A就相当于就是一个委托方,而B就是一个代理方,委托方向代理方提出需求并且要去传递参数,而代方要去完成委托方的需求,并且去返回处理的结果。其实代理模式就是这样的过程。其实大概

2017-12-12 22:47:23 255

原创 ios-保存密码

其实有的时候我们会需要在客户端本机上进行保存密码的操作,但是我们不能明文的去保存密码,因为这样不安全,首先我们一般发送给服务器的密码都是经过加密的密码,所以我们可以去保存这个加密的密码保存到本地,但是如果有需求是要我们程序退出到用户的登录页面的时候点击密码框我们还可以继续输入密码的话,那么我们就不应该再去保存已经加密过的密码的因为我们如果我们加密过的密码是采取MD5加密或者其他散列加密算法加密的话

2017-12-12 22:00:15 461

原创 ios-Runtime的简单使用

其实在OC底层本质上就是C语言函数的调用,去动态的发送消息。下面就拿一个alloc init的方法来举个例子,我们完全可以去调用运行时的函数,这样就可以去创建一个对象了   Person * p = objc_msgSend(objc_getClass("Person"),sel_registerName("alloc"));        objc_msgSend(p, sel

2017-12-11 19:23:48 319

原创 适配器模式浅析

首先先举个例子,在现实生活中每个国家的电压不一样,如果我们出去旅游没有电源适配器的话是根本无法充电的,但是我们会发现现在的情况都逐渐的消失了,因为充电器里面其实自带了这么一个电源适配器,这其实就是适配者模式的体现。适配器模式有个解释如下将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。适配器模式中有三个概念我们也需要知

2017-12-10 08:30:58 283

原创 享元模式浅析

享元模式的设立其实主要就是为了减少创建对象的数量,这样就可以去减少内存的占用和提高性能,也就是说尽可能的去减少内存的使用量和分享给更多的相似的物件。有个例子是这样的就是如果一个文本系统的话如果我们采取每一个字母都定义一个对象,那如果我们有几万的相同的字母不是就会有几万个对象了吗,那肯定是不可能的而且也不会这么设计,所以我们就需要用到享元模式了。享元模式通常是和工厂模式一起使用的,大概的实现

2017-12-09 18:42:28 250

原创 工厂模式浅析

一、简单工厂首先工厂模式其实分为简单工厂,工厂方法和抽象工厂,工厂模式其实就是我需要什么,这个工厂就给我制造什么。关于简单工厂模式的应用如下所示:首先中定义一个抽象类,抽象类中写一些我们需要的抽象方法或者属性,抽象子类去继承这个抽象类,然后再去实现具体的操作。然后工厂类根据外界的需求去创建对应的抽象子类实例并传给外界,而对象的创建是什么类型是由外界决定的。外界只需要知道抽象子类与之对应的参数即可,...

2017-12-09 16:41:02 305

原创 桥接模式浅析

基本概念1、桥接模式是将抽象部分与它的实现部分分离。桥接模式的特点其实就是1、把依赖与具体实现的改为依赖抽象,以此来脱耦,达到松耦合状态 2、其实就是分离了接口和实现的部分,提高了扩展性。其实我们可以这么理解桥接模式设计到抽象类和一个桥接口,其中桥接口其实就是用户要去定义实体类去实现具体功能的那个方法。2、桥接模式将继承关系转换为关联关系,所以降低了类与类之间的耦合,减少了我们的代码编写量...

2017-12-09 11:42:06 1087

原创 策略模式浅析

简单概述:先说下官话策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。举个例子就比如说我们有很多个if else 判断if else判断就拿下面的代码来举个例子,就比如我们是要根据某个特定的条件去判断做不一样的处理的话,我们堆在一起,这样根据条件判断的语句会变得很长以后看起来其实也很难的去维护,所以我们可以考虑利用策略...

2017-12-08 18:29:40 259

原创 UML建模浅析

UML建模技术是一种建模语言,指用模型元素来组建整个系统的模型,模型元素包括系统中的类、类和类之间的关联、类的实例相互配合实现系统的动态行为等。利用UML图可以更好的表达出我们代码的业务逻辑是怎么样的,所以首先我们应该搞清楚UML图中的一些关系和箭头是什么意思才能更好的去看清楚别人所写的一个UML结构图,先看两张图把关于依赖关系上面说的知识一部分,其实还有就是,依赖(dependency)关系表示...

2017-12-08 16:07:36 334

原创 设计模式基本原则浅析

设计模式其实就是在针对开发中存在的问题,去设计的解决方案,当然这些解决方案也经过很多人的实践通过了别人的认可的。设计模式可以使项目的结构变的清晰,也好维护。设计模式其实就是用来解决问题的。设计模式的原则其实就是去构建可复用和可维护代码,设计模式的几个基本原则下面也简单的介绍下。1、开闭原则就是一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现一个扩展和变化。其实就是一个理想化的过程就...

2017-12-08 09:24:58 332

原创 ios- NSURLRequest缓存策略以及NSURLConnection发送异步请求

关于NSURLRequest的下面的这个方法缓存策略的举例[NSURLRequest requestWithURL:url cachePolicy:policy timeoutInterval:1]    NSURLRequestUseProtocolCachePolicy = 0,  默认的缓存策略    NSURLRequestReloadIgnoringLocalCacheD

2017-12-07 20:27:03 423

原创 ios-通过Reachability监听网络状态

Reachability实际上是苹果公司对SCNetworkReachability API做的封装,这个API被定义在SystemConfigure.framework库中,网上可以去下Reachability框架,在AFN中其实监听网络的状态就是对这个框架做了一个封装,在AFN中应该有这么一个类AFNetworkReachabilityManager。那么我们如果想要实时的去监听网络的状态应该

2017-12-07 10:55:03 3272

原创 ios-枚举类型

在ios中的枚举类型一般来说有两种一种是NS_ENUM,另外一种是NS_OPTIONS。两者都可以去指定枚举的值的数据类型如果是NS_OPTIONS的话就可以用按位或来一起的去设置数值,就比如说下面这个我们就可以用 | 符号来连接。这里的UL是unsigned long的意思typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) { NSJ...

2017-12-06 17:23:52 453

原创 ios-设置线程满足某个条件销毁

有的时候我们可能会用到NSThread来进行创建线程然后去执行任务,但是如果我们想让一个任务在执行之后可以再接下去执行下一个任务的话。如果前一个任务执行的够快的话,这个线程就会被销毁了,我们应该如何去保证这个线程去保留下来。这个时候我们就应该去从Runloop着手,因为主线程之所以一直不销毁就是因为有Runloop的存在。所以我们也可以从这方便着手,代码如下所示。首先先设置一个标记属性就是标记

2017-12-06 11:25:44 2576

空空如也

空空如也

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

TA关注的人

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