iOS

作者: developer200 | 来源:发表于2019-07-02 18:40 被阅读0次

    开发记录

    iOS 深复制与浅复制

    浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址

    深拷贝是真正的复制了一份,复制的对象指向了新的地址


    UIViewController 生命周期

    按照执行顺序排列:

    1.initWithCoder:通过nib文件初始化时触发。

    2.awakeFromNib:nib文件被加载的时候,会发生一个awakeFromNib的消息到nib文件中的每个对象。

    3.loadView:开始加载视图控制器自带的view。

    4.viewDidLoad:视图控制器的view被加载完成。

    5.viewWillAppear:视图控制器的view将要显示在window上。

    6.updateViewConstraints:视图控制器的view开始更新AutoLayout约束。

    7.viewWillLayoutSubviews:视图控制器的view将要更新内容视图的位置。

    8.viewDidLayoutSubviews:视图控制器的view已经更新视图的位置。

    9.viewDidAppear:视图控制器的view已经展示到window上。

    10.viewWillDisappear:视图控制器的view将要从window上消失。

    11.viewDidDisappear:视图控制器的view已经从window上消失。


    多线程 队列


    weak 与 strong

    weak 用于一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。


    assign 和weak二者区别

    assign 与 weak 都是弱引用声明类型;

    区别是 : weak声明的变量在栈中就会自动清空,赋值为nil。        

    assign声明的变量在栈中可能不会自动赋值为nil,就会造成野指针错误!


    推送注册方法


    自动的引用计数(Automatic Reference Count 简称 ARC),是苹果在 WWDC 2011 年大会上提出的用于内存管理的技术。

    引用计数(Reference Count)是一个简单而有效的管理对象生命周期的方式。当我们创建一个新对象的时候,它的引用计数为 1,当有一个新的指针指向这个对象时,我们将其引用计数加 1,当某个指针不再指向这个对象是,我们将其引用计数减 1,当对象的引用计数变为 0 时,说明这个对象不再被任何指针指向了,这个时候我们就可以将对象销毁,回收内存。由于引用计数简单有效,除了 Objective-C 语言外,微软的 COM(Component Object Model )、C++11(C++11 提供了基于引用计数的智能指针 share_prt) 等语言也提供了基于引用计数的内存管理方式。

    ARC 的工作原理大致是这样:当我们编译源码的时候,编译器会分析源码中每个对象的生命周期,然后基于这些对象的生命周期,来添加相应的引用计数操作代码。所以,ARC 是工作在编译期的一种技术方案,这样的好处是:

    编译之后,ARC 与非 ARC 代码是没有什么差别的,所以二者可以在源码中共存。实际上,你可以通过编译参数 -fno-objc-arc 来关闭部分源代码的 ARC 特性。

    相对于垃圾回收这类内存管理方案,ARC 不会带来运行时的额外开销,所以对于应用的运行效率不会有影响。相反,由于 ARC 能够深度分析每一个对象的生命周期,它能够做到比人工管理引用计数更加高效。例如在一个函数中,对一个对象刚开始有一个引用计数 +1 的操作,之后又紧接着有一个 -1 的操作,那么编译器就可以把这两个操作都优化掉。

    但是也有人认为,ARC 也附带有运行期的一些机制来使 ARC 能够更好的工作,他们主要是指 weak 关键字。weak 变量能够在引用计数为 0 时被自动设置成 nil,显然是有运行时逻辑在工作的。我通常并没有把这个算在 ARC 的概念当中,当然,这更多是一个概念或定义上的分歧,因为除开 weak 逻辑之外,ARC 核心的代码都是在编译期填充的。

    assign和weak二者区别

    assign与weak,它们都是弱引用声明类型,最大的区别在那呢?

    如果用weak声明的变量在栈中就会自动清空,赋值为nil。

    如果用assign声明的变量在栈中可能不会自动赋值为nil,就会造成野指针错误!

    原子(atomic)跟非原子(non-atomic)属性有什么区别?

    1). atomic提供多线程安全。是防止在写未完成的时候被另外一个线程读取,造成数据错误

    2). non-atomic:在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。

    相关文章

      网友评论

        本文标题:iOS

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