唐巧的博客

唐巧的博客

记录下自己学习的点滴

谈Objective-C block的实现

前言

这里 有关于 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 在编译器中的实现方式。主要包括:

  1. block 的内部实现数据结构介绍
  2. block 的三种类型及其相关的内存管理方式
  3. block 如何通过 capture 变量来达到访问函数外的变量
分析支付宝客户端的插件机制

前言

因为开了 iOSDevTips 的微信公共账号,老收到各种 iOS 开发的问题,前两天收到一个问题的内容是:

请问像支付宝钱包那样可以在应用里安装自己的应用,是已经在应用里写了逻辑,还是可以向应用里发送代码 ?

我觉得这个问题挺有意思的,估计大家都感兴趣,所以今天就抽空研究了一下,将支付宝客户端的插件机制具体实现方式介绍给大家。

先介绍一下该插件机制,如上图所示,支付宝客户端在安装后,对于像 “彩票”、“爱心捐赠” 这类功能,需要再点击安装一次,然后才可以使用。有些时候该插件功能进行了升级,需要点击升级才可以继续使用。插件的方式有利于软件动态增加新的功能或升级功能,而不用再一次向 AppStore 提交审核。另外,由于用户不需要的插件可以不用安装,也缩小了应用本身的体积大小,节省了下载流量。

写在创业一周年

前言

大约在去年这个时候,我离开网易有道,开始了自己的创业不归路。一年过去了,总是在忙碌,在最忙的时候,我连博客都没有时间更新了。但是这一年的经历对我的成长重大,还是挺值得写下来的,在此将我的故事分享给那些一同走在创业路上的朋友。

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 submodule的坑

前言

随着近几年的发展,Git 已经成为开源界的标准的版本控制工具。开源界的重量级项目,如 Linux, Android, Eclipse, Gnome, KDE, Qt, ROR, Debian,无一例外的都是使用 git 来进行版本控制。如果你还不会 Git,那么恕我直言,你已经 out 了,赶紧抽空充充电吧。本文并不打算做 Git 入门级介绍,想学习 git 的同学,推荐国内作者蒋鑫写的 《Git 权威指南》

对于一些比较大的工程,为了便于复用,常常需要抽取子项目。例如我开发的猿题库客户端现在包括 3 门考试,客户端涉及的公共 UI、公共底层逻辑、公共的第三方库、以及公共的答题卡扫描算法就被我分别抽取成了子项目。这些子项目都以 git submodule 的形式,增加到工程中。

在使用了 git submodule 一段时间后,我发现了一些 submodule 的问题,在此分享给大家。

历史上的WWDC门票售空图片
2008年62天售空。介绍了iPhone 3G。 2009年33天售空。介绍了iPhone 3GS。 2010年8天售空。介绍了iPhone 4。 2011年12小时售空。介绍了iO...
那些被遗漏的Objective-C保留字

今天翻到很久以前自己在网易博客上写的 这篇文章,惊奇地发现自己都忘记了里面的一些内容。所以我又重新学习了一下,然后改了改内容,挪到这里。

前言

Steffen Itterheim《Learn Iphone and Ipad Cocos2d Game Development》 作者。cocos2d 和 cocos2d-x 现在已成为著名的游戏开发引擎。在 AppStore 上有超过 100 个游戏是基于 Cocos2D。

Steffen Itterheim 在 他的博客 中总结了 Objective-C 2.0 所有的编译器保留字,并且对这些保留字做了介绍和使用示例。这些保留字如下:

@class
@defs
@protocol @required @optional @end
@interface @public @package @protected @private @property @end
@implementation @synthesize @dynamic @end
@throw @try @catch @finally
@synchronized @autoreleasepool
@selector @encode
@compatibility_alias
@”string”

我把这些保留字过了一遍,发现很少用到的有 @dynamic @defs @encode @compatibility_alis,所以就给大家介绍一下这几个关键字吧。

iOS应用内支付(IAP)的那些坑

前言

udacity 中的在线课程 《How to build a startup》 中提到,所谓创业,就是尝试寻找新的赢利模式。正因为这是一种尝试,所以不可避免地需要调整产品方向,寻找市场中还未被发现的用户需求,给用户创造价值,进而获得收入。最近很火的 精益创业 的观点,则是强调将这种尝试成本降到最小,使得自己可以根据市场反馈迅速调整产品。

我们在今年春节后上线了新的在线智能题库:猿题库。这应该是我们在互联网教育这个创业领域尝试的第二个方向。

猿题库现在推出了公务员考试行测和申论 2 个产品,均包括 web, iOS 和 Android 三个平台。这次我们尝试做一个收费的产品,所以在 iOS 端集成了应用内支付(IAP)功能。在开发过程中和上线后,我们遇到了 IAP 中的一些坑,在此分享给各位。

是否应该使用ARC?

我和身边做 iOS 开发的同事组建了一个 QQ 群,每隔一段时间,大家就会讨论是否应该使用 ARC。所以我觉得有必要将这些讨论分享出来,让大家消除对于 ARC 的疑虑。

设置应用内的系统控件语言

在iOS应用中,有时候会需要调用系统的一些UI控件,例如:

  1. 在UIWebView中长按会弹出系统的上下文菜单
  2. 在UIImagePickerController中会使用系统的照相机界面
  3. 在编译状态下的UITableViewCell,处于待删除时,会有一个系统的删除按钮。

以上这些UI控件中,其显示的语言并不是和你当前手机的系统语言一致的。而是根据你的App内部的语言设置来显示。结果就是,如果你没有设置恰当的话,你的中文App可能会出现一些英文的控件文字。

avatar
唐巧
一个中年程序员,正在努力学习做业务