程序启动
构造方法的返回值类型选择:
- instancetype:会自动识别当前方法是哪个类在调用,自动转换成该类
- className: 子类调用的的时候会不匹配
- id:不能使用点语法;可以调用任何对象的方法,不利于代码的检查
UIPickView联动BUG:
在UIPickView快速滚动的时候,
[self.pickView selectedRowInComponent:0]
返回的行号会快速改变,与此同时,- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
代理方法也会加载对应的要联动的列的数据,但是,这个时候由于前面返回的行号快速改变,导致更新title的时候,行号与实际的行号不一致,可能在取数据的时候,导致数据数组越界;
application启动过程:
-
任何程序首先会调用main函数,iOS一样首先会调用main.m文件里面的main函数,
int main(int argc, char * argv[])
; -
在main函数中会调用
UIApplicationMain(argc, argv, principalClassName, delegateClassName
函数;函数全程
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
- principalClassName: UIApplication或者它的子类的名称,如果传nil,表示 UIApplication;
- delegateClassName:传入程序代理的的类名
在这个函数中会创建UIApplication对象和AppDelegate对象
- 开启主运行循环,监听系统事件
- 读取应用程序的info.plist文件,判断是否有main文件(main.storyboard或者其他指定初始化加载的storyboard文件)
- 有指定的storyboard(系统会自己做一些事情)
- 系统首先创建一个UIWindow对象
- 然后把window设置为AppDelegate的window属性值
- 再设置 storyboard或xib对应的控制器设置为window的rootViewcontroller(会自动将rootViewcontroller.view加到window上)
- 最后将window设置为application的主窗口并显示出来
[window makeKeyAndVisible]
- 没有指定的storyboard(我们要手动在程序启动完毕做一些操作)
- 创建AppDelegate的window,和屏幕尺寸一致
- 设置window的rootViewcontroller(会自动将rootViewcontroller.view加到window上)
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中进行设置
注意点:为什么一定要将控制器设置为window的rootViewcontroller?
因为:只有viewcontroller才能响应一些系统事件,比如屏幕的旋转。如果仅仅将viewcontroller.view添加到window上面,会显示内容,但是不能响应很多事件。
UIWindow
应用程序创建的第一个控件。在AppDelegate中提供了一个UIWindow对象的接口,就是应用程序需要显示的内容的载体,以后要展示的内容最好放在这里
- window.hidden = NO 就可以显示window
- 设置window.windowLevel就可以设置window的层级(除了对应枚举,还可以对应数值)
通过xib加载控制器:(以LJViewController为例)
加载方式:[[LJViewController alloc]initWithNibName: bundle:]
- nibName:传nib文件名,加载指定的nib文件;传nil的话:
- 首先会寻找与类名相似没有controller字样nib文件(这里会是LJView.xib)
- 如果没有找到,就会寻找与类名同名的xib文件(这里是LJViewController.xib)
- 如果还是没有找到,就会给控制器创建一个空的view,这个空的view几乎是透明的,但不是完全透明的。注意:用户可以穿过完全透明的view进行操作;clearColor并不是完全透明的