Haley-Wong

Write the code, Change my world.

RunLoop 总结:RunLoop的应用场景(二)让Timer正常运转

上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景。这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转。 参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看。我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料。 关于iOS 中的RunLoop资料非常的少,以下...

RunLoop 总结:RunLoop的应用场景(一)保证线程长久存活

参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看。我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料。 关于iOS 中的RunLoop资料非常的少,以下这些资料都是非常好的。 CF框架源码(这是一份很重要的源码,可以看到CF框架的每一次迭代,我们可以下载最新的版本来分析,或与以下文章对比学习。目前最新的是CF-1153....

设计模式中的设计原则

先来抛一个问题,设计模式到底有几个原则? 翻了三本书《设计模式之禅》、《设计模式:可复用的面向对象软件元素》、《Head First 设计模式》,也看了不少博客和关于设计模式原则的文章。关于设计模式有几大原则,似乎没有严格的定论,有的说6大设计原则,有的说7大设计原则,《Head First》中更是提到了9个设计原则。 不管是多少个设计原则,最终都是希望程序达到 “高内聚,低耦合”,代码...

设计模式简介

一直想总结一下设计模式,已经拖了大半年了,今天正式开始吧。 什么是设计模式? 设计模式(Design pattern)是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总...

算法之路---查找斐波纳契数列中第 N 个数

算法题目 查找斐波纳契数列中第 N 个数。 所谓的斐波纳契数列是指: 前2个数是 0 和 1 。 第 i 个数是第 i-1 个数和第i-2 个数的和。 斐波纳契数列的前10个数字是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 … 分析 斐波那契数列满足公式f(n) = f(n-1) + f(n-2),n > 0。...

Objective-C 中如何测量代码的效率

背景 在我们编程的时候,可能经常会有一些疑问: 我们写的某个方法的执行效率是多少? 方法 A 和 方法 B 哪个更快? 因此,我们不可避免的要用到一些方法来计算代码的执行效率。计算代码的执行效率可以使用的API有: NSDate CFAbsoluteTimeGetCurrent CACurrentMediaTime dispatch_benchmark ...

YYModel V1.0.4源码解析

YYKit出现了很长时间了,一直想要详细解析一下它的源码,都是各种缘由推迟了。 最近稍微闲了一点,决定先从最简单的YYModel开始吧。 首先,我也先去搜索了一下YYModel相关的文章,解析主要API和用法的居多,也有很多人大呼看不懂。其实主要还是要静下心来看,因为YY用了很多并不常见,也不常用的底层API,你一个个去查官方文档会发现,他们并不难。 YYModel 里对转换过的mod...

iOS工程修改名称

我们在iOS开发中,难免会遇到项目做到一半要改名字的情况。如果项目名差的太大,工程名看起来总是不舒服的,有良心的开发者可能就会想着为工程改个贴切的名字,那么你就为用到本文记录的内容。 如果我们开发的两个项目相差不大,只有部分主题、布局有更改,那么我们就可以拷贝之前已经完成的项目,改改名字,再对部分界面和代码稍稍修改就可以啦。 如何修改工程名呢? 下面我就拿一个中等大小的项目来实际操作一下...

Runtime系列(二)--Runtime的使用场景

Runtime 理解介绍的文章非常多,我只想讲讲Runtime 可以用在哪里,而我在项目里哪些地方用到了runtime。多以实际使用过程为主,来介绍runtime的使用。 那么runtime 怎么使用?可以用在哪些场景下呢? 首先,使用runtime 相关API,要#import <objc/runtime.h> 1.运行时获取某个类的属性或函数 运行时动态获取某个类的属性...

Runtime系列(一)-- 基础知识

众所周知,Objective-C 是一种运行时语言。运行时怎么来体现的呢?比如一个对象的类型确定,或者对象的方法实现的绑定都是推迟到软件的运行时才能确定的。而运行时的诸多特性都是由Runtime 来实现的。 Runtime 其实就是一套C语言API库,因此它的实现也还是C语言。如果你想看Runtime的实现源码,可以去官网下载:objc4-646.tar.gz(我看的是这个)。 本篇不打...

GCD API 记录 (三)

本篇就不废话啦,接着上篇记录我见过或者使用过的与GCD相关的API。由于一些API使用的非常少,用过之后难免会忘记,还是记录一下比较好。 6.dispatch_group_wait 该API依然是与dispatch_group配合使用。它会阻塞当前所在的线程,直到前面的blocks 执行完成,或者超时的时候返回。 大致意思是:该方法会同步的等待之前提交的block 对象们完成,如果在...

GCD API记录(二)

前言 这是关于GCD的第二篇文章,GCD的API有100多个,通过快捷键Option + 单击,可以在Reference中的Grand Central Dispatch (GCD) Reference中看到。除了上篇文章介绍的几个外,其他用到的API就在这篇文章里记录。 API 汇总记录 1.dispatch_once Execute a block once and only once....

GCD API 理解 (一)

资料先行 GCD 深入理解:第一部分 GCD 深入理解:第二部分 以上两篇文章是关于GCD讲的比较好的文章,翻译自raywenderlich,该网站有很多关于iOS 开发的优秀文章。 引子 iOS 开发中有三大进阶性的技术点,分别是GCD、runtime 和runloop。其中GCD用的最多,runtime也有不少使用场景,runloop在系统的API里体现的比较多,项目里实际使用比...

算法之路---呈现O(logN)型的三个算法

典型时间复杂度 我们知道算法的执行效率,可以从它的时间复杂度来推算出一二。而典型的时间复杂度有哪些类型呢? 由上图,可以看出,除了常数时间复杂度外,logN型的算法效率是最高的。今天就介绍三种非常easy的logN型算法。 对分查找 给定一个整数X和整数A0,A1,…,An-1,后者已经预先排序并在内存中,求是的Ai= X的下表i,如果X不在数据中,则返回i = -1. - (int...

算法之路---求最大子序列

废话 对于IT行业者来说,刚参加工作,还能找点借口,说自己不擅长算法。可是工作三年以上的IT开发者,还说自己不会算法,不会设计模式就说不过去了。所以最近开始撸算法和设计模式,重新开一个集记录算法的学习之路。算法在用户量比较少,或者计算量比较小的时候,影响确实不大,但是到达一定数量级的时候,算法的优劣就会极大的影响程序的顺畅程度。优秀的算法甚至能给人amazing的感觉。 今天记录《数据结构...