前言
原创文章,转载请注明出自 唐巧的技术博客。
本文主要介绍 Objective-C 对象模型的实现细节,以及 Objective-C 语言对象模型中对isa swizzling
和method swizzling
的支持。希望本文能加深你对 Objective-C 对象的理解。
ISA 指针
Objective-C 是一门面向对象的编程语言。每一个对象都是一个类的实例。在 Objective-C 语言的内部,每一个对象都有一个名为 isa 的指针,指向该对象的类。每一个类描述了一系列它的实例的特点,包括成员变量的列表,成员函数的列表等。每一个对象都可以接受消息,而对象能够接收的消息列表是保存在它所对应的类中。
在 XCode 中按Shift + Command + O
, 然后输入 NSObject.h 和 objc.h,可以打开 NSObject 的定义头文件,通过头文件我们可以看到,NSObject 就是一个包含 isa 指针的结构体,如下图所示:
引言
在今年 WWDC 的内容公开之前,大家都以为 iOS 系统里面只有一种中文字体。为了达到更好的字体效果,有些应用在自己的应用资源包中加入了字体文件。但自己打包字体文件比较麻烦,原因在于:
1、字体文件通常比较大,10M - 20M 是一个常见的字体库的大小。大部分的非游戏的 app 体积都集中在 10M 以内,因为字体文件的加入而造成应用体积翻倍让人感觉有些不值。如果只是很少量的按钮字体需要设置,可以用一些工具把使用到的汉字字体编码从字体库中抽取出来,以节省体积。但如果是一些变化的内容需要自定义的字体,那就只有打包整个字体库了。
2、中文的字体通常都是有版权的。在应用中加入特殊中文字体还需要处理相应的版权问题。对于一些小公司或个人开发者来说,这是一笔不小的开销。
以上两点造成 App Store 里面使用特殊中文字库的 iOS 应用较少。现在通常只有阅读类的应用才会使用特殊中文字库。
但其实从 iOS6 开始,苹果就支持动态下载中文字体到系统中。只是苹果一直没有公开相应的 API。最终,相应的 API 在今年的 WWDC 大会上公开,接下来就让我们来一起了解这个功能。
前言
这里 有关于 block 的 5 道测试题,建议你阅读本文之前先做一下测试。
先介绍一下什么是闭包。在 wikipedia 上,闭包的定义 是:
In programming languages, a closure is a function or reference to a function together with a referencing environment—a table storing a reference to each of the non-local variables (also called free variables or upvalues) of that function.
翻译过来,闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时候也称作自由变量)。
block 实际上就是 Objective-C 语言对于闭包的实现。
block 配合上 dispatch_queue,可以方便地实现简单的多线程编程和异步编程,关于这个,我之前写过一篇文章介绍:《使用 GCD》。
本文主要介绍 Objective-C 语言的 block 在编译器中的实现方式。主要包括:
- block 的内部实现数据结构介绍
- block 的三种类型及其相关的内存管理方式
- block 如何通过 capture 变量来达到访问函数外的变量
前言
因为开了 iOSDevTips 的微信公共账号,老收到各种 iOS 开发的问题,前两天收到一个问题的内容是:
请问像支付宝钱包那样可以在应用里安装自己的应用,是已经在应用里写了逻辑,还是可以向应用里发送代码 ?
我觉得这个问题挺有意思的,估计大家都感兴趣,所以今天就抽空研究了一下,将支付宝客户端的插件机制具体实现方式介绍给大家。
先介绍一下该插件机制,如上图所示,支付宝客户端在安装后,对于像 “彩票”、“爱心捐赠” 这类功能,需要再点击安装一次,然后才可以使用。有些时候该插件功能进行了升级,需要点击升级才可以继续使用。插件的方式有利于软件动态增加新的功能或升级功能,而不用再一次向 AppStore 提交审核。另外,由于用户不需要的插件可以不用安装,也缩小了应用本身的体积大小,节省了下载流量。
本文首发于 InfoQ,本文版权归 InfoQ 所有,转载请保留 原文链接。
前言
随着 iOS 开发的流行,针对 iOS 开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具。这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics 等), App Store 销售分析工具(例如 App annie), App crash 收集工具(例如 Crashlytics),App 测试发布工具(Test Flight), App Push 服务等。
这些解决方案或工具节省了 iOS 开发者大量的开发时间,但是由于相关介绍文章的缺乏,许多开发者都在重复着自己一次又一次重新造轮子。所以我希望,将我自己使用和调研的相关的第三方服务使用经验,整理成一系列文章,以便广大开发者能够省去大量的重复性工作。
今天介绍 AppStore 统计工具:App Annie 和苹果的命令行统计工具。
前言
随着近几年的发展,Git 已经成为开源界的标准的版本控制工具。开源界的重量级项目,如 Linux, Android, Eclipse, Gnome, KDE, Qt, ROR, Debian,无一例外的都是使用 git 来进行版本控制。如果你还不会 Git,那么恕我直言,你已经 out 了,赶紧抽空充充电吧。本文并不打算做 Git 入门级介绍,想学习 git 的同学,推荐国内作者蒋鑫写的 《Git 权威指南》。
对于一些比较大的工程,为了便于复用,常常需要抽取子项目。例如我开发的猿题库客户端现在包括 3 门考试,客户端涉及的公共 UI、公共底层逻辑、公共的第三方库、以及公共的答题卡扫描算法就被我分别抽取成了子项目。这些子项目都以 git submodule 的形式,增加到工程中。
在使用了 git submodule 一段时间后,我发现了一些 submodule 的问题,在此分享给大家。