主题十八《基础》

1、 APP main 为什么一直运行,不会退出,while,RunLoop

#mark  应用程序的启动原理
int main(int argc, char * argv[]) {
    NSString * appDelegateClassName;
    @autoreleasepool {
        // Setup code that might create autoreleased objects goes here.
        appDelegateClassName = NSStringFromClass([AppDelegate class]);
    }
    //第三个参数:UIApplication的名称或者是它子类的名称 nil = @"UIApplication"
    //第四个参数:UIApplication对象代理的名称
    //NSStringFromClass([AppDelegate class])
    return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

1、执行main函数
2、执行UIApplicationMain
  2.1、 创建UIApplication对象,并设置UIApplication它的代理。
  2.2、 开启了一个事件循环(mainRunloop),主运行循环,死循环,保证应用程序不退出。
  2.3、 加载info.plist(判断info.list当中有没有指定Main,如果指定的话
    {
      系统自动帮你做的事情:
      加载Main.storyBoard,加载之前会创建一个window,
      因为每一个window都必须得要设置一个根控制器.rootViewController,设置的目的是强引用根控制器让它不释放,
      所以会把Main.storyBoard当中箭头指向的控制器设置为window的rootViewController。
      把Main.storyBoard当中箭头指向的控制器的view添加到window,让window显示出来。
    }

  2.4、 通知应用程序代理,应用程序启动完毕. didFinishLaunchingWithOptions:


2、 ViewController 调用过程,loadView,viewDidLoad等方法做什么

截屏2020-09-15 下午3.16.25.png

图解:
1、view在被调用时先找有没有,有就直接返回,没有就进入loadView;
2、然后判断loadView方法是不是自定义的,如果是就进入自定义方法加载view,然后进入viewDidLoad,最后返回view,如果不是自定义的就判断是否存在storyboad;
3、如果存在storyboad就从storyboad上加载view,然后进入viewDidLoad,最后返回view
4、如果不存在storyboad则系统直接加载一个空view,然后进入viewDidLoad,最后返回view

3、WKWebView OC与js互调原理(自有方法方法回调和WWJB-scheme拦截处理)

4、 iOS中数据存储的方式有哪些?

(1)属性列表 NSUserdefault 系统给我们定义的存储单例类用于存储少量的用户数据,系统将它存储在沙盒下library/prefrence下,以key/value的形式存储。小数据量的存储和查询操做。

(2)对象序列化 也就是归档,当自定义对象想要进行归档时需要遵循nscoding协议,其中有两个协议方法initwithcode编码和encodewithcode解码。小数据量的存储和查询操做。

(3)SQLITe 大数据量的存储和查询操做。

(4)CoreData 大数据量的存储和查询操做。

5、 iOS中的通信方式有哪些?

(1)delegate 是一种回调机制,是一对一的通信交互,需要定义协议方法、代理属性,并且建立代理关系和实现协议方法才能实现通信,效率高。

(2)block 是一种回调机制,是一对一的通信交互,使用简单,通信事件比较多的话建议使用delegate。

(3)nsnotification 是一对多的通信交互,对象之间不需要建立关系,但需要一个中心对象向所有观察者提供变更通知,负责发出通知。

(4)kvo 是一对多的通信交互,对象之间不需要建立关系,被观察者直接向观察者发送通知,负责发出通知。

6、 系统中单例类

(1)UIApplication(应用程序实例)
(2)NSUserDefaults(应用程序设置)
(3)NSNotificationCenter(通知中心)
(4)NSFileManager(文件管理)
(5)NSURLCache(请求缓存)
(6)NSHTTPCookieStorage(应用程序cookie池)

7、 内存泄漏检查

静态分析方法(Analyze)和动态分析方法(Instrument的leak)。
Analyze 优点:
2、能够在编码阶段,开发自行进行代码检查。早期发现代码隐患。
3、直接分析源代码来发现程序中的错误,而不需要实际运行。
4、自动检测Objective-C程序中的BUG,发现内存泄露和其它问题。
5、内存问题发现越早,解决的代价就越小。
主要分析以下四种问题:
1、逻辑错误:访问空指针或未初始化的变量等;2、内存管理错误:如内存泄漏等;3、声明错误:从未使用过的变量;4、Api调用错误:未包含使用的库和框架。
Instruments里面工具很多,常用:1). Time Profiler: 性能分析2). Zombies:检查是否访问了僵尸对象,但是这个工具只能从上往下检查,不智能。3). Allocations:用来检查内存,写算法的那批人也用这个来检查。4). Leaks:检查内存,看是否有内存泄露。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...
    iYeso阅读 5,858评论 0 13
  • • 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向...
    WSGNSLog阅读 5,037评论 0 1
  • 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...
    JonesCxy阅读 4,722评论 1 7
  • 1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...
    i爱吃土豆的猫阅读 3,064评论 0 1
  • 1.关于方法的执行顺序问题,代码示例如下: dispatch_after 第二个参数为0,可以理解为在当前时刻向主...
    oc123阅读 4,438评论 0 0