1. LLVM
LLVM是一个模块化和可重用的编译器和工具链技术的集合,Clang 是 LLVM 的子项目,是 C,C++ 和 Objective-C 编译器,目的是提供惊人的快速编译
是一种非常强大的编译器基础架构框架,专门为使用您喜爱的编程语言编写的程序的编译时、链接时和运行时优化而设计。LLVM 可运行于若干个不同的平台之上,它以能够生成快速运行的代码而著称。
iOS5 之后,iOS 开发中 Objective-C 是 Clang / LLVM 来编译的。
2. self.title
只要设置self.title,那么self.navigationItem.title和self.tabBarItem.title值不管设置与否都和self.title一致。
3. UIWindow
UIWindow的作用
- 作为UIView的最顶层容器,包含应用显示所需要的所有UIView。
- 传递触摸消息和键盘事件给UIView
3.1. UIWindow添加UIView的方式
a. [window addSubView:view];
b. self.window.rootViewController = vc;
b方式设置跟控制器后,UIWindow会自动将view controller的view添加到当前window中,同时负责维护view controller和view的生命周期。
3.2 系统对UIWindow的使用
UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar __TVOS_PROHIBITED;
调用一些系统控件时,如UIAlertView,为了使UIAlertView在最顶层,会临时创建一个新的UIWindow,通过设置 UIWindowLevel = UIWindowLevelAlert,呈现在最顶层,默认UIWindow 的UIWindowLevel = UIWindowLevelNormal。
3.3 手动创建UIWindow的场合
不管在APP的哪个界面,此时要将某个view呈现在最顶层(如类似于支付宝钱包App的手势解锁功能界面),可以通过创建一个UIWindow来实现。
需要注意的是,和创建UIView不同,UIWindow一旦被创建,它就自动地被添加到整个界面上了(当然,其windowLevel要足够高),如果我们创建的UIWindow需要处理键盘事件,那就需要合理地将其设置为keyWindow。keyWindow是被系统设计用来接收键盘和其他非触摸事件的UIWindow。我们可以通过makeKeyWindow和resignKeyWindow方法设置window是否为keyWindow。
3.4 [UIApplication sharedApplication].keyWindow 和[UIApplication sharedApplication].delegate.window
[UIApplication sharedApplication].keyWindow 应用程序当前显示的窗口
[UIApplication sharedApplication].delegate.window 应用程序将要使用的窗口
如果要在window上添加一个子视图,建议使用[UIApplication sharedApplication].delegate.window,因为 [UIApplication sharedApplication].keyWindow会出现nil的情况,而 [UIApplication sharedApplication].delegate.window不会出现会nil的情况
[UIApplication sharedApplication].keyWindow使用用来接收键盘和其他与触摸无关的事件的window,keyWindow只有一个,而且会发生变化,如果创建一个新的window并设置为keyWindow,keyWindow就是后面的那个window。
参考链接:
[UIApplication sharedApplication].keyWindow 和[UIApplication sharedApplication].delegate.window的区别