在日常开发中,数据库降低了我们操作数据的门槛,我们只要编写特定的 SQL,就能对数据做增删改查操作。在简化的背后,往往都隐藏着性能优化的福利,数据库也是如此,我们知道假如没有索引,查询数据就会全表扫描,而索引就如书的目录一般,大大提高了查询效率。本文将对数据库索引进行介绍,认识索引的数据结构,同时也介绍索引的其他概念。

阅读更多 →

RunLoop 是个老生常谈的话题了,一直以来对 RunLoop 的认识还停留在 深入理解RunLoop( YY 大神) 等业内好文当中,对于自个来说仍有些知识盲区:

  • 网上有文章用伪代码提到 CheckIfExistMessagesInMainDispatchQueue(); ,代码看似提供了一次执行 main queue 的机会,为什么有这样的设计?
  • 怎么理解在 kCFRunLoopBeforeSources 和 kCFRunLoopAfterWaiting 之间来检测是否卡顿?
  • 我们能在代码中看到 USE_DISPATCH_SOURCE_FOR_TIMERS 这样的宏,到底 GCD 的 timer 与 RunLoop 有关吗?
  • 能让 RunLoop 退出的几种方式
阅读更多 →

之前负责项目的包体积优化学习了 Mach-O 文件的格式,那么 Mach-O 究竟是怎么样的文件,知道它的组成之后我们又能做点什么?本文会从 Mach-O 文件的介绍讲起,再看看认识它后的一些实际应用。

阅读更多 →

以前我们常用 fixedSpace 的方式为 UINavigationBar 上的 UIBarButtonItem 设置间距:

1
2
3
4
5
6
7
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                                                                target:nil
                                                                                action:nil];

negativeSpacer.width = -8;

[self.navigationItem setLeftBarButtonItems:@[negativeSpacer, button] animated:NO];
阅读更多 →

Core Text 是苹果提供的富文本排版技术,可以定制开发图文混排功能,DTCoreText、Nimbus、YYLabel 等优秀的开源库底层都是基于 Core Text 的封装和扩展。本文将介绍 Core Text 的基本用法,逐步讲解我是如何封装一个 AttributedLabel 的。

阅读更多 →