美文网首页
最新版本iOS内存管理

最新版本iOS内存管理

作者: Lee坚武 | 来源:发表于2017-01-09 22:15 被阅读19次

    IOS 内存管理

    1.MRC(人工引用计数),手动管理内存。

    MRC模式下,所有的对象都需要手动的添加retain、release代码来管理内存。使用MRC,需要遵守谁创建,谁回收的原则。也就是谁alloc,谁release;谁retain,谁release。

    当引用计数为0的时候,必须回收,引用计数不为0,不能回收,如果引用计数为0,但是没有回收,会造成内存泄露。如果引用计数为0,继续释放,会造成野指针。为了避免出现野指针,我们在释放的时候,会先让指针=nil。

    2.ARC(自动引用计数),自动管理内存。

    ARC是IOS5推出的新功能,通过ARC,可以自动的管理内存。在ARC模式下,只要没有强指针(强引用)指向对象,对象就会被释放。在ARC模式下,不允许使用retain、release、retainCount等方法。并且,如果使用dealloc方法时,不允许调用[super dealloc]方法。

    ARC模式下的property变量修饰词为strong、weak,相当于MRC模式下的retain、assign。strong :代替retain,缺省关键词,代表强引用。weak:代替assign,声明了一个可以自动设置nil的弱引用,但是比assign多一个功能,指针指向的地址被释放之后,指针本身也会自动被释放。

    三、与内存有关的修饰符

    strong :强引用,ARC中使用,与MRC中retain类似,使用之后,计数器+1。

    weak :弱引用 ,ARC中使用,如果只想的对象被释放了,其指向nil,可以有效的避免野指针,其引用计数为1。

    readwrite : 可读可写特性,需要生成getter方法和setter方法时使用。

    readonly : 只读特性,只会生成getter方法 不会生成setter方法,不希望属性在类外改变。

    assign :赋值特性,不涉及引用计数,弱引用,setter方法将传入参数赋值给实例变量,仅设置变量时使用。

    retain :表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1。

    copy :表示拷贝特性,setter方法将传入对象复制一份,需要完全一份新的变量时。

    nonatomic :非原子操作,不加同步,多线程访问可提高性能,但是线程不安全的。决定编译器生成的setter getter是否是原子操作。

    atomic :原子操作,同步的,表示多线程安全,与nonatomic相反。

    相关文章

      网友评论

          本文标题:最新版本iOS内存管理

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