Objective-C--runtime整理 发表于 2017-03-26 | 消息传递动态绑定在 Objective-C 中,方法的调用常被称作消息传递,这是因为 objc 是一种动态语言,有别于 C 语言。先来理解以下 C 语言的函数调用方式。C 语言使用“静态绑定”(static binding),也就是说,在编译期就能决定运行时所应调用的函数。以下列代码为例: 1234 ... 阅读全文 »
iOS多线程 发表于 2017-03-20 | 多线程是一种十分常用的技术,但它也容易发生各种问题。比如多个线程更新相同的资源会导致数据的不一致(数据竞争)、停止等待事件的线程会导致多个线程相互持续等待(死锁)、使用太多线程会消耗大量内存等。 iOS 目前有4套多线程方案: pthread NSThread GCD NSOperation p ... 阅读全文 »
iOS内存管理 发表于 2017-03-18 | 引用计数每个对象都有一个引用计数(retainCount),对对象obj执行[obj retain],其引用计数就+1;执行[obj release],其引用计数就-1。当对象的引用计数减至0时,就会被销毁。引用计数是一种十分简单的内存管理方式,但是如果针对每个对象都要手写retain、releas ... 阅读全文 »
Objective-C对象的整理与思考 发表于 2017-03-18 | 内存模型对象本质是 c 中的结构体,Objective-C 中对对象的定义为struct objc_object,其中isa是它唯一的私有成员变量。在内存模型中,每个对象除了isa指针,还包括从顶级父类到直接父类,以及自己的所有成员变量。 类对象isa指针指向的是对象的类,对象的类本质上也是对象,称 ... 阅读全文 »
UITableView的性能优化 发表于 2017-02-19 | UITableView是最常用的控件,所以一个滑动流畅的tableview对于用户体验是多么重要。下面整理了一些针对UITableView的性能优化的方法。 重用UITableViewCell这一点很多人都知道,就是要利用苹果提供的cell重用机制,不要每次都重新创建cell。在tableView: ... 阅读全文 »
objc中的修饰符 发表于 2017-02-17 | __strong 修饰符__strong修饰符是id类型和对象类型默认的所有权修饰符。id和对象类型在没有明确指定所有权修饰符时,默认为__strong修饰符。以下两行代码相同: 12id obj = [[NSObject alloc] init];id __strong obj = [[NSObj ... 阅读全文 »
复习一下排序算法 发表于 2017-01-21 | 桶排序简化版假如有一个考试,满分10分。有5个同学分别考了5分、3分、5分、2分和8分,需要将分数进行排序。 首先需要申请一个大小为11的数组int a[11],将a[0]~a[10]都初始化为0,表示这些分数还都没有人得过。例如,a[0]等于0就表示目前还没有人得过0分…… 第一个人的分数是5分, ... 阅读全文 »
【翻译】Mock不是Stub 发表于 2016-10-27 | 在测试中,“mock对象”常被用来描述模仿真实对象的特殊对象。现在,大部分语言环境提供了便于创建mock对象的框架。然而常被忽视的是,mock对象不只是一种用来测试的特殊对象,它还代表了一种不同的测试风格。在本文中,我将解释mock是如何工作、它们如何进行基于行为验证的测试,以及相关社区如何开发出一 ... 阅读全文 »
hexo使用记录 发表于 2016-10-14 | Hexo是一个快速、简洁且高效的博客框架。Hexo使用Markdown(或其他渲染引擎)解析文章,它可以使用各种主题生成静态网页。可以用Hexo快速搭建博客,而不需要任何数据库和后台代码。一般会把Hexo部署在GitHub Pages上,如果想在国内更快的访问,可以搭建在Coding上,它同样提供了 ... 阅读全文 »