callMethodWithCompletionBlock 中 Block 的内存管理

开发中不时会遇到 [obj callMethodWithCompletionBlock:^{ [obj doSomething] }] 这种写法。调用一个 OC 实例对象的带有 block 回调的方法,并且 block 实现又引用了该实例变量。写到这里经常会犹豫,要不要弱引用该实例变量,会不会造成循环引用。本文通过 Demo 演示了相关的几种情况,并对内存管理加以分析。

Read More

像素如何被绘制到屏幕上(译)

前言

之前看到一篇很好的关于视图渲染的文章(Getting Pixels onto the Screen),最近项目中遇到一些帧率优化的问题,想起来又阅读了一遍,并且抽时间进行了翻译,以便今后学习查阅。

正文

将内容显示到屏幕上,有许多方式可以实现。这个过程包含许多框架,依靠许多函数和方法的组合实现。本文讨论该过程的底层原理。当你需要考虑相关性能问题时,本文内容能够帮助挑选最优的 API。本文研究的对象是 iOS 系统,不过其中大部分内容也适用于 OS X。

Read More

Git 回滚多次提交最佳实践

一、前言

在开发过程中有这么一种情况,某个特性开发的代码需要回滚,但是该特性的开发提交和所有即将上线的提交处于统一分支,此时需要将该特性相关的提交依次回滚。在回滚代码时希望满足两个要求,能够保留详细的回滚日志信息、只产生一次提交记录。

Read More

代码混淆

class-dump 可以方便的导出 app 的类名和方法名,即使编译好的程序也能被第三方清晰看到编码信息。为了隐藏这些信息,可以对代码进行混淆,使得用如 class-dump 工具导出的类名和方法名变成毫无意义的乱码。

Read More

实现 GitHub Pages 的评论系统

前言

2018-10-29 更新:

最近买了个虚拟主机,可以简化前端工作,而且服务端使用命令行工具,也不会像前端实现这么复杂。旧的使用 GitHub API 方式的实现,可以访问
这个链接


本博客系统使用 GitHub Pages 服务。基本上所有文件为纯文本文件,使用 Git 执行版本控制并托管于 GitHub。GitHub Pages 在后台使用 Jekyll 将当前提交内容编译成静态站点,实现网站发布。

Read More

ARC 内存管理和 GCD

前言

Pro Multithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks 这本书篇幅不多,可分为如下3部分,共8个章节。

内存管理基础知识:第一章、Life Before Automatic Reference Counting;第二章、ARC Rules;第三章、ARC Implementation。

Block:第四章、Getting Started with Blocks;第五章、Blocks Implementation。

GCD:第六章、Grand Central Dispatch;第七章、GCD Basics;第八章、GCD Implementation。

本文为该本书的读书笔记,Block 相关的内容比较多,参考这篇文章

Read More

UTI,Uniform Type Identifier

文本文件可以使用文本编辑器打开,图片可以使用图片查看软件打开,这些操作都包含文件类型的判断。文件类型的表示方式很多,本文介绍的 UTI(Uniform Type Identifier)是 Apple 提出的一种表示文件类型的方法。其它的文件类型表示方法还有 OSType、文件名后缀、MIME 等。

Read More

可循环滚动的 ScrollView

代码:CycleScrollView

上述代码实现可循环滚动的 ScrollView。具体需求有如下2点:

1、支持分页滚动;

2、支持循环滚动。

实现参考了网上搜到的一些方案,经过几次优化,形成最终的版本。许多实现存在一些缺陷,比如,快速滑动时会卡住,等 ScrollView 停止滑动后再滑动就可以了。最初的版本也存在这个问题,因为布局调整是在 scrollViewDidEndDecelerating 中实现的,快速滑动时不会调用到该方法中。

Read More

初试项目管理,个人经验小结

加入百度时间不长,一直参与百度浏览器 iPhone 版的开发。开发组里每位同事会轮流负责新版本的管理工作,在试用期转正的1个月后,我承担了一次重大更新版本的项目管理工作。

这次重大更新版本从进入开发到 App Store 发布,将近2个月时间。本文是对这段经历的总结,包括管理经验、个人感受、个人思考。

Read More

Objective-C 消息传递

OC 为动态运行时语言,其将许多决策从编译和链接时延迟到运行时执行。OC 中的方法调用本质为消息传递,[receiver message] 可以解释为向 receiver 对象发送 message 消息。今天阅读了 Apple 开发文档的 Messaging 章节,利用运行时系统提供的相关方法,OC 消息传递式的方法调用最终转换成了标准 C 语言函数调用方式,实现了统一。

本文以 Apple 开发文档为基础,讲述 OC 以消息传递方式实现方法调用的执行流程。第一节介绍执行消息解析的函数;第二节讲述消息解析过程中,消息对应的方法实现是如何寻找的;第三节讲述方法实现找到后,如何执行。

Read More