摘要: 我们知道,Objective-C是一门动态语言,它将很多静态语言在编译时期做的事放到了运行时来处理。用C++编写的程序通过编译器直接把函数地址硬编码进入可执行文件;而Objective-C无法通过编译器直接把函数地址硬编码进入可执行文件,而是在程序运行的时候,利用Runtime根据条件判断作出决定, 阅读全文
posted @ 2017-04-11 22:31 LeeGof 阅读(861) 评论(0) 推荐(0) 编辑
摘要: 上篇介绍了Runtime类和对象的相关知识点,在4.5和4.6小节,也介绍了成员变量和属性的一些方法应用。本篇将讨论实现细节的相关内容。 在讨论之前,我们先来介绍一个很冷僻但又很有用的一个关键字:@encode 1.类型编码 为了协助运行时系统,编译器用字符串为每个方法的返回值、参数类型和方法选择器 阅读全文
posted @ 2017-04-11 22:31 LeeGof 阅读(1292) 评论(0) 推荐(0) 编辑
摘要: 前两篇介绍了类与对象、成员变量&属性&关联对象的相关知识,本篇我们将开始讲解Runtime中最有意思的一部分内容:消息处理机制。我们从一个示例开始。 在OC中,我们使用下面这种方式来调用方法: 对上面的方法调用,我们用Runtime的消息发送机制改造一下: 对于上面的结果,我们来验证一下: 上面的C 阅读全文
posted @ 2017-04-11 22:31 LeeGof 阅读(1323) 评论(0) 推荐(0) 编辑
摘要: 通过前面几篇对Runtime的讲解,本篇汇总一下Runtime实际中常用的一些场景。 1.获取类的基本信息 获取类名: 获取成员变量: 获取属性: 获取类的实例方法: 2.动态创建类和类的基本信息 创建类: 添加成员变量: 添加属性: 添加方法: 3.关联对象 4.消息转发/方法交换 详见Runti 阅读全文
posted @ 2017-04-11 22:30 LeeGof 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 1.什么是Runloop 在开始聊RunLoop之前,我们先来了解一下程序的执行原理。一般来说,程序是在线程中执行,一个线程一次只能执行一个任务(关于GCD,可看上篇文章介绍),执行完成后线程就会退出。类似这样: 在我们的App中,我们需要的是这样一个机制:线程能随时处理事件但不退出。这种机制叫做E 阅读全文
posted @ 2017-03-13 16:14 LeeGof 阅读(716) 评论(1) 推荐(0) 编辑
摘要: 1.关于GCD Grand Central Dispatch是异步执行任务的技术之一。我们先看一个简单的示例: 这个示例实现的功能很简单:在后台线程中执行长时间的处理,处理结束后,在主线程中使用处理结果。上面实现方式是使用NSObject类的performSelectorInBackground和p 阅读全文
posted @ 2017-03-09 20:49 LeeGof 阅读(993) 评论(0) 推荐(0) 编辑
摘要: 1. 总体指导原则 【规则1-1】首先是为人编写程序,其次才是计算机。 说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力,所以提倡写代码之前多思考,特别是逻辑复杂或者技术难点较高的地方,个人思考不清 阅读全文
posted @ 2016-12-28 16:51 LeeGof 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 在WWDC 15,Apple提出的ATS (App Transport Security) ,是 Apple 在推进网络通讯安全的一个重要方式。在 iOS 9 和 OS X 10.11 中,默认情况下非 HTTPS 的网络访问是被禁止的。当然,因为这样的推进影响面非常广,作为缓冲,我们可以在 Inf 阅读全文
posted @ 2016-12-28 16:26 LeeGof 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 这里对HTTP请求的抓包操作不做讲解了,只讲解HTTPS的抓包要进行的操作。 【说明】:下面以MAC电脑示例,Windows版本可参考:http://weibo.com/ttarticle/p/show?id=2309404009801469264549 1.电脑安装Charles的根证书 操作路径 阅读全文
posted @ 2016-12-28 16:18 LeeGof 阅读(710) 评论(0) 推荐(0) 编辑
摘要: 看了limboy和Casa的文章,关于组件化开发,整理了一下思路。 1.为什么要进行组件化开发? 一个产品,在最开始的时候,由于业务简单,一般是直接在一个工程里开发。这种方式,在产品起步阶段,是没有问题的,也能够有效的保证开发效率。但随着业务的不断发展,代码量不断增多,开发团队不断壮大,最后的模块间 阅读全文
posted @ 2016-09-12 12:42 LeeGof 阅读(1378) 评论(0) 推荐(1) 编辑
摘要: 【前言】:本篇为同事崔桂祥分享资料。 随着Xcode 5的发布,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器。它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能。LLDB为Xcode提供了底层调试环境,其中包括内嵌在Xcode IDE中的位于调试区域的控制面板 阅读全文
posted @ 2016-08-02 11:39 LeeGof 阅读(1152) 评论(0) 推荐(0) 编辑
摘要: 1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件。 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查看可执行文件或库文件的UUID。示例: 1.3. symbolicatecrash 苹果提供的命令行 阅读全文
posted @ 2016-08-02 10:13 LeeGof 阅读(3178) 评论(0) 推荐(0) 编辑
摘要: 在iOS开发中,我们常会用CocoaPods来进行依赖库的管理。CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库,然后 CocoaPods 就会进行下载,集成,然后修改或者创建我们项目的 workspace 文件。 相比之下,Carthage 就要轻量很多, 阅读全文
posted @ 2016-08-01 17:49 LeeGof 阅读(2150) 评论(0) 推荐(0) 编辑
摘要: 下面这张UML图(该图为网上找到的),比较形象地展示了各种类图关系: 对于继承、实现这两种关系没多少疑问,它们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准确定位是很难的,前面也提到,这几种关系都 阅读全文
posted @ 2016-07-26 15:20 LeeGof 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;它同样体现整体与部分间的关系,但此时整体与部分是不可分的,它们具有统一的生存期,整体的生命周期结束也就意味着部分的生命周期结束,部分对象与整体对象之间具有同生共死的关系,组合关系中的部分,是不能在 阅读全文
posted @ 2016-07-26 15:15 LeeGof 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 聚合关系是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系,此时整体与部分之间是可分离的,它们可以具有各自的生命周期。比如计算机与CPU、公司与员工的关系等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。 在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部 阅读全文
posted @ 2016-07-26 15:08 LeeGof 阅读(678) 评论(0) 推荐(0) 编辑
摘要: 关联关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的,关联可以是单向、 阅读全文
posted @ 2016-07-26 11:26 LeeGof 阅读(753) 评论(0) 推荐(0) 编辑
摘要: 依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就 阅读全文
posted @ 2016-07-26 11:14 LeeGof 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 实现关系是用来描述接口和实现接口的类或者构建结构之间的关系,接口是操作的集合,而这些操作就用于规定类或者构建结构的一种服务。 在接口和类之间的实现关系中,类实现了接口,类中的操作实现了接口中所声明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。 UML示例图如下所示: 阅读全文
posted @ 2016-07-26 11:06 LeeGof 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 这是以前旧博客在13年规划写的一个系列,写了一部分内容,还没有完成。现在重新整理编写。计划从基础知识六大设计原则、设计模式中类的关系开始,然后会对iOS开发中的常用架构模式进行介绍,最后对GoF的23种设计模式进行分析。由于本人编写本系列文章时也是边学习边整理,因此持续的时间会比较长,更多的是希望和 阅读全文
posted @ 2016-07-25 21:15 LeeGof 阅读(842) 评论(3) 推荐(1) 编辑
摘要: 1.定义 一个软件实体(如类、模块、函数)应当对扩展开放,对修改关闭。 2.定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的。那么如何应对需求变化的情况?这就是开放-关闭原则要谈的。 开放-封闭原则的思想就是设计的时候,尽量让设计的类做好后就不再修改,如果有新的需 阅读全文
posted @ 2016-07-25 21:11 LeeGof 阅读(4579) 评论(0) 推荐(0) 编辑
摘要: 1.定义 狭义的迪米特法则定义:也叫最少知识原则(LKP,Least Knowledge Principle)。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 广义的迪米特法则定义:一个模块设计得好坏 阅读全文
posted @ 2016-07-25 21:08 LeeGof 阅读(1678) 评论(0) 推荐(0) 编辑
摘要: 1.定义 里氏替换原则的定义有两种,据说是由麻省理工的一位姓里的女士所提出,因此以其名进行命名。 定义1:如果对一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1所定义的程序P中在o1全都替换成o2时,程序的行为不发生任何变化,那么T2为T1的子类。 定义2:所有引用父类的地方都必须能够 阅读全文
posted @ 2016-07-25 20:39 LeeGof 阅读(1885) 评论(0) 推荐(0) 编辑
摘要: 1.定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖细节;细节应该依赖抽象。 2.定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原子操作的模块),两者都应该依赖于抽象。我们平时常说的“针对接口编程,不要针对实现编程”就是依 阅读全文
posted @ 2016-07-25 18:27 LeeGof 阅读(749) 评论(0) 推荐(0) 编辑
摘要: 1.定义 客户端不应该依赖它不需要的接口; 一个类对另一个类的依赖应该建立在最小的接口上。 2.定义解读 定义包含三层含义: 一个类对另一个类的依赖应该建立在最小的接口上; 一个接口代表一个角色,不应该将不同的角色都交给一个接口,因为这样可能会形成一个臃肿的大接口; 不应该强迫客户依赖它们从来不用的 阅读全文
posted @ 2016-07-25 17:15 LeeGof 阅读(2796) 评论(0) 推荐(0) 编辑
摘要: 1.定义 就一个类而言,应该仅有一个引起它变化的原因。 2.定义解读 这是六大原则中最简单的一种,通俗点说,就是不存在多个原因使得一个类发生变化,也就是一个类只负责一种职责的工作。 3.优点 类的复杂度降低,一个类只负责一个功能,其逻辑要比负责多项功能简单的多; 类的可读性增强,阅读起来轻松; 可维 阅读全文
posted @ 2016-07-25 16:28 LeeGof 阅读(855) 评论(0) 推荐(0) 编辑
摘要: 什么是泛化关系?用一个例子简单的说:假设A是B和C的父类,B、C具有公共类(父类)A,说明A是B、C的一般化(概括,也称泛化),B、C是A的特殊化。 在编程上,泛化关系(Generalization)就是我们常说的继承关系,称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系, 阅读全文
posted @ 2016-07-25 15:02 LeeGof 阅读(2531) 评论(0) 推荐(0) 编辑
摘要: 导航栏和TabBar结合的项目,在我们平常开发中会经常看到,下面我们通过自定义的TabBar来实现一个导航和TabBar结合的Demo。 1.自定义TabBar 2.怎么使用? 阅读全文
posted @ 2016-07-19 17:20 LeeGof 阅读(1391) 评论(0) 推荐(0) 编辑
摘要: 自定义视图是在项目开发中经常会面临的工作,通过对视图进行封装,能达到更好的复用性,并使得VC里面的逻辑更加清晰。本篇将对实际项目中常用的图片轮播进行封装。 1.先从源码看起 首先,定义了一个枚举类型,用于区分图片的存储类型:网络图片还是本地图片。 然后对图片轮播类进行了功能封装。 最后,通过扩展来遵 阅读全文
posted @ 2016-07-19 16:54 LeeGof 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 和OC一样,Swift中也可以添加运行时属性。下面将提供一个完整的例子,演示如何给按钮点击事件添加运行时属性。 1.示例 2.示例说明 在Swift中,闭包不属于AnyObject,因此,需要做一个相互转换。如下所示: 使用方式如下: 阅读全文
posted @ 2016-07-19 14:31 LeeGof 阅读(1794) 评论(0) 推荐(0) 编辑