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

JSPatch 代码分析

JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug。”

JSPatch 的实现原理可参考原作者(bang590)的相关文章。本文给出 JSPatch 部分代码分析纪录。

Read More

图片查看器中单张图片浏览的实现与优化

一、背景

百度浏览器3.1版本引入了图片查看器。我在3.2版本接手该模块,并修改与优化。百度浏览器中的图片查看器效果和微信中查看本人已发布照片调起的图片查看器功能类似。百度浏览器中许多模块能够调起图片查看器,如下载页面、趣星球、网页,以提供用户一致的图片浏览体验。

图片查看器的整体设计不必多说。在图片查看器中浏览单张图片时,为了实现最优的浏览体验,自己花了不少时间调试。本文对该部分功能中的知识和经验做记录。

Read More

在 UIScrollView 中使用 Autolayout

通过为控件设定约束,Autolayout 能够实现控件布局的自适应。当 app 运行时,iOS 根据预先设定的约束布局界面元素。

以约束的方式为控件 A 设定布局,控件 A 的实际布局数据是通过约束的依赖关系计算出来的。比如,控件 A 的 leading 始终和控件 B 的 trailing 相等,则控件 A 的 leading 数据依赖于控件 B 的 trailing 数据。

一、问题

当在 UIScrollView 中采用 Autolayout 方式布局时,情况变得有些复杂。UIScrollView 的 contentSize 依赖于其子视图的布局,而其子视图的布局依赖于 UIScrollView 的 contentSize。如图1所示。

Read More

iOS App 在不同状态下收到 push 通知的行为

iOS App有多种运行状态,并且可能在任一状态下接收到APNS (Apple Push Notification Service)发送来的push通知;针对一条push通知,用户可能采取不同动作。

为了合理的处理push通知,需要开发者在合适的地方提供处理代码。通过测试,本文总结出iOS App在不同状态下接收到push通知的行为。本文只是简单的总结处理push通知的时机,针对更加复杂的push功能未做调研。

Read More