#iOS

最近游戏上线了 iOS 版本,期间来来回回提审了 2、3 次,最终没有经历太多波折顺利上线,写下这篇文章记录下审核期间遇到的问题,方便以后查看和提前避免一些问题。

从刚开始学习 iOS 的时候就很想做一款 MarkDown 的编辑工具,但是一直也没有下定决心去搞,最近想开始重新学习 iOS,就想到从 MarkDown 编辑器的实现方式学起,把这段时间学到的东西记录下来,方便以后查看。

前几天在看响应者链条的时候,看到 UIResponder 有两个很有用的属性,但是自己不熟悉,就是 inputViewinputAccessoryView。原来自己练手的时候,需要这样的功能,但是自己不知道这两个属性,导致自己花费了很多时间。所以,就写下这篇,算是对不知道的知识的补充。

响应者链条在刚学 iOS 的时候有学过,但是平常开发也很少去仔细思考,也没有发生过很大的错误,所以就更加不会去考虑 What Under The Hood。

在实习的时候要做自定义 transition。我在 UITransitionView 上添加了一个 subview 作为背景 view,点击这个背景的 view,要 dismiss 掉 present 的 ViewController,给背景的 view 添加了一个 UITapGestureRecognizer,但是背景的 view 就是死活不响应点击。来来回回折腾了好久才找出原因:事件根本就没有传递给背景的 view 😭😭。

我们知道 iOS App 有五种状态:not running/inactive/active/background/suspended,当用户按下 Home 键的时候,App 就会进入 background 状态,随后进入 suspended 状态。在 suspended 状态下,我们没有办法对 App 进行任何操作。所以,我们会尽量在 background 状态下就做好 App 的一些清理等操作,来使 App 有进入 suspended 的准备。但是,iOS 系统分配给 App 的 background 状态下的时间是有限的,我们需要做一些自定义的操作来向 iOS 系统申请更多的后台时间,或者直接常驻后台。例如一些音乐类 App,当我们退出这类 App,我们还是可以听到 🎵 的播放,这些 App 就属于常驻后台的 App。

这一篇介绍如何将 Autolayout 应用到 UIScrollView 上。

在 [UIScrollView Tutorial: Getting Started][2] 这篇文章中的 Scrolling and Zooming a Large Image 这节中,给 UIScrollView 添加 top/bottom/leading/trailing 的约束,确定 UIScrollView 的 frame。再给 UIScrollView 中的 UIImageView 添加 constant 为 0 的 top/bottom/leading/trailing 约束,运行之后,UIScrollView 中的 contentSize 就是图片的大小,可以滚动查看所有内容。

申明:以下知识点均来自网络,来源均在每节最前面给出,侵删。
感谢愿意分享知识的人 🙏🙏,是他们让我们学习了更多更好的知识。

前一段时间准备百度面试总结的一些知识点,虽然面试没过 😭😭 把这些东西记录下来,也方便自己以后查看。

The Main Function

每个基于 C 语言的程序的入口都是 main 函数,iOS App 也没有区别。开发 iOS 你不需要自己编写 main 函数,Xcode 的模版项目会自动实现,一般情况下你不需要修改 main 函数。main 函数会将控制权交给 UIKit framework。UIApplicationMain 函数会创建应用的核心对象,从 SB 文件中加载 UI 界面,启动 App 的 runloop 等等。

#import "AppDelegate.h"
 
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

关于在 Main 函数之前发生了什么,可以看这个 [iOS 程序 main 函数之前发生了什么][2]。

这一篇主要是总结自己在看 App Programming Guide for iOS 的一些收获。大部分内容都是来自 App Programming Guide for iOS。

Xcode 创建的新项目能直接运行在真机和模拟器上,但是你需要做一些自定义才能提交到 App Store 和给用户提供好的体验。

在我年少无知的时候其实就已经写过一篇关于 GCD 的文章,自己现在拿出来看觉得有点羞愧,发现自己对 GCD 的认识基本上还是停留在一年前的水平,所以自己开始慢慢补上 GCD 的知识。

将以前写的东西拿出来充字数提醒自己。

UITableView 应该是 iOS 开发中最重要的控件,当我们要展示多个相似的模型数据的时候,毫无疑问 UITableView 是最好的选择,Apple 已经将 UITableView 的优化做到非常极致了,满足我们简单的模型数据展示基本上是没有问题的。但是很多时候,我们展示的不是简简单单的文字数据,还有其他对性能消耗很大的数据,例如:图片等。在数据不多的情况下,遵循 UITableView 的标准使用方式就能满足要求。像 Twitter / Weibo 这样的数据模型很复杂,数量也很多的情况下,我们就需要通过各种手段来优化 UITableView 的滚动流畅度。