美文网首页
iOS 内存管理

iOS 内存管理

作者: swagon | 来源:发表于2017-06-20 10:15 被阅读17次

    iOS 设备的内存是极其有限的,直接影响用户体验。
    Session 242 iOS App Performance Memory

    内存相关

    1. 堆栈:已知数据类型会被分配在栈上,栈上的内存不需要自己管理,栈是每个线程独享的一种数据结构,未知大小的类型需要向堆申请控件,堆的内存需要自己管理
    2. 比如:Person *p=[[Person alloc] init]; ,alloc是分配内存空间,init 是做初始化,*p存放堆空间返回的地址
    3. ARC实际上一个语法糖,编译器在合适的位置为你添加MRC的代码,只要出现了new,alloc,retain,就一定要出现一个release,autorelease
    4. 内存分类:Clean Memory,Dirty Memory
    5. 物理内存和虚拟内存
    6. 虚拟内存映射到物理内存会存在一个寻址的过程,界限寄存器判断物理内存地址是否越界,如果没有,就加上基址
    7. 桌面使用Swap机制,将不用的进程置换到磁盘
    8. iOS 使用优先级队列的机制,从闲置到后台再到前台,如果内存还是不足,就杀掉进程

    属性

    1. atomic:线程安全
    2. nonatomic:非线程安全
    3. strong: 强引用对象
    4. weak: 弱引用对象
    5. assign: 基本数据类型,可以修饰非OC对象
    6. copy: NSString,NSArray,NSDictionary等

    copy mutableCopy

    1. 集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制 可变对象都是内容复制,不可变对象copy是指针,mutableCopy是内容复制

    Retain Cycle

    1. strongweak dance
    2. __weak打破self环
    3. __strong确保对象不释放

    NSAutoReleasePool

    1. 将线程中要执行的任务都放在自动释放池中,自动释放池会捕获所有任务中的对象,在任务结束或线程关闭之时自动释放这些对象
    2. 每个主Runloop结束时进行drain操作,自动释放池收到 drain消息时将这些对象的引用计数减一,然后将它们从池子中移除 。

    AutoReleasePool

    1. 避免内存峰值,循环一次释放一次,一次性归还很多,每次归还一点点

    相关文章

      网友评论

          本文标题:iOS 内存管理

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