in iOS

所有项目在一定阶段都会遇到组件化的问题。特别是在代码量越来越大、模块越来越多的情况下,都需要一定的机制去简化页面间跳转的流程,并通过这个机制实现不同模块之间一定程度的解耦。在我看来,我需要一个有如下特点的方案:

  • 能够聚合为不同模块,以方便管理;
  • 也能有灵活性允许分散至不同地方;
  • 能够安全、方便地调用,不至于误写导致排查困难;
  • 能够像方法一样定义、实现;
  • 能够检测重复定义;
  • 对编辑器友好,有代码补全、能使用注释;
  • 特殊情况允许单独处理;
  • 允许重定向;
  • 增加起来直观;
  • 私有和公共的简单权限控制;
  • 缓存机制;
  • 错误处理;
  • 链式调用;
  • 等等

要求还挺多……那还是自己造个轮子吧。于是催生了这个方案:AOPRouter。简单的说,它是一个基于URL形式的、利用了Objective-C Runtime特性的路由方案。

Read More
in 随笔

北京书市

原本是没有计划去北京书市的——一周前偶然在豆瓣上看到这个活动,被底下的评论拔了草。早上醒来阳光甚好,不想负了这明媚春光,琢磨着该去哪儿走走,突然就想起了这个活动。今天大概是今年这活动最后一天去的机会吧,那么就出去走走吧。写了几行代码,吃罢午饭便动身,目的地朝阳公园。

Read More
in iOS

可以说UITableView是iOS开发中极为重要的一个View。其头部(Header)的展示也是非常重要。其中一种常见的需求就是Header跟随TableView滑动中间,需要根据情况将头部收起或者完全展示出来。当然常见的做法可以通过KVO监听contentOffset,或者通过UIScrollViewDelegate获取contentOffset的值后进行处理——直到我注意到UISearchBar竟然完美地实现了这个效果,于是就有了本文。

Read More
in Project

知乎改版有一段时间了,新版褒贬不一。鉴于自己并不是知乎重度患者,所以对我来说虽有些瑕疵,自己动动手就好了。于是写了一个Chrome扩展,慢慢完善。

Read More
in iOS

在iOS开发中,广泛运用了类蔟(Class clusters)的设计模式。如NSNumber、NSString、NSArray等。类簇其实是对现实的一种抽象和封装,基于抽象工厂模式(Abstract Factory Pattern)。最近在读书过程中联想到一些东西,于是尝试更加深入地去了解它。

Read More
Hello 2017, Bye 2016
in iOS

得益于Objective-C的Runtime系统,对象的方法调用通过消息传递的机制进行,从而避免了很多情况下的判空操作。block也是Objective-C世界的对象,然而如果当它为空时,调用它却能导致崩溃。归根结底,其实是因为block的调用并不使用消息传递那套机制,而是通过跳转到特定的函数地址进行函数调用。我们可以先这么粗略的解释一下,然后再深入一点进行探讨。

Read More