程序启动

作者: Ljson | 来源:发表于2015-07-06 20:47 被阅读436次

构造方法的返回值类型选择:

  • instancetype:会自动识别当前方法是哪个类在调用,自动转换成该类
  • className: 子类调用的的时候会不匹配
  • id:不能使用点语法;可以调用任何对象的方法,不利于代码的检查
UIPickView联动BUG:

在UIPickView快速滚动的时候,[self.pickView selectedRowInComponent:0]返回的行号会快速改变,与此同时,- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component代理方法也会加载对应的要联动的列的数据,但是,这个时候由于前面返回的行号快速改变,导致更新title的时候,行号与实际的行号不一致,可能在取数据的时候,导致数据数组越界;

application启动过程:

  1. 任何程序首先会调用main函数,iOS一样首先会调用main.m文件里面的main函数,int main(int argc, char * argv[])

  2. 在main函数中会调用UIApplicationMain(argc, argv, principalClassName, delegateClassName函数;函数全程
    int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

    • principalClassName: UIApplication或者它的子类的名称,如果传nil,表示 UIApplication;
    • delegateClassName:传入程序代理的的类名

在这个函数中会创建UIApplication对象和AppDelegate对象

  1. 开启主运行循环,监听系统事件
  2. 读取应用程序的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并不是完全透明的

相关文章

  • App的生命周期

    iOS程序的启动执行顺序 程序启动顺序图 具体执行流程 启动程序 按下 Command + H + SHIFT 重...

  • 小程序你应该知道的那些事

    小程序的运行机制 小程序把启动分为两种:冷启动、热启动 冷启动就是第一次启动小程序,或是小程序从被内存销毁到再次启...

  • APP进程启动过程

    应用程序进程启动过程,Android7.0为例。 应用程序进程,启动应用程序从启动应用程序进程开始。点击应用程序启...

  • windows 开机启动项位置

    开始→程序→启动 C:\Documents and Settings\All Users\「开始」窗体\程序\启动...

  • hs可视化工具

    启动java服务器注意事项 得先启动jetty再启动java程序 启动java程序 java -jar start...

  • 微信小程序启动、更新机制

    小程序启动 小程序启动会有两种情况,一种是「冷启动」,一种是「热启动」。 热启动:假如用户已经打开过某小程序,然后...

  • 小程序的冷启动和热启动

    小程序启动 小程序启动可以分为两种情况,一种是冷启动,一种是热启动。 冷启动 :如果用户首次打开,或小程序销毁后被...

  • IOS AppDelegate

    ios程序启动顺序 ·启动程序时顺序:构造函数->程序被激活 ·进入切换程序界面(双击home键)执行:程序即将取...

  • Windows常用指令整理【持续更新】

    shell:startup 设置windows开启启动程序。命令将打开windows启动目录,将想要开机启动的程序...

  • 应用程序进程启动过程

    应用程序进程简介 要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。AMS 在启动应用程序...

网友评论

    本文标题:程序启动

    本文链接:https://www.haomeiwen.com/subject/qpvyqttx.html