zoukankan      html  css  js  c++  java
  • OC-ARC简介

    ARC是什么:

      1.ARC是编译器特性,而不是运行时特性;

      2.ARC不是其他语言中的垃圾回收,有着本质区别;

    ARC的优点:

      1.完全消除了手动管理内存的烦琐;

      2.基本上能避免内存泄露;

      3.有时还能更加快速,因为编译器还可以执行某些优化;

    ARC的判断准则:

      只要没有强指针指向对象,对象都会被释放,(默认情况下所有的指针都是强指针)

      强指针(__strong)    弱指针(__weak)

      

     1 int main(int argc, const char * argv[]) {
     2     @autoreleasepool {
     3         Person *p =[[Person alloc] init];
     4         p=nil;//执行完这行释放p
     5         
     6         __strong Person *p1 = [[Person alloc] init];
     7         __weak Person *p2 = p1;
     8     }//在这行释放p2
     9     return 0;
    10 }

      弱指针,在刚创建完就会被释放。(不要把一个刚刚创建的对象给一个弱指针)

    当两个对象互相引用的时候,会出现循环引用,在ARC中的解决办法是:

      一个用strong,一个用weak;

    Person.h:

    #import <Foundation/Foundation.h>
    @class Dog;
    @interface Person : NSObject
    
    @property(nonatomic,strong)Dog *dog;
    @end

    Person.m:

    #import "Person.h"
    
    @implementation Person
    
    - (void)dealloc
    {
        NSLog(@"person dealloc");
        
    }
    
    @end

     Dog.h:

    #import <Foundation/Foundation.h>
    @class Person;
    
    @interface Dog : NSObject
    
    @property(nonatomic,weak)Person * person;
    
    @end

    Dog.m:

    #import "Dog.h"
    
    @implementation Dog
    
    - (void)dealloc
    {
        NSLog(@"dog dealloc");
    }
    
    @end

    main.m:

    Person * p =[[Person alloc] init];
    Dog * dog = [[Dog alloc] init];
    p.dog = dog;
    dog.person = p;

    这样处理之后最后就可以全部释放了:

    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    Named Formats!
    基于vue的自定义日历组件
    vue使用html2canvas实现移动端H5页面截图
    vue使用domtoimage实现移动端H5页面截图
    swiper5切换页面数据动态加载
    H5 jq+canvas实现pc写字板功能
    vue多语言转换的几种方法
    echarts折线图单组数据配置
    H5 canvas的使用(二):移动端手势密码
    svn的仓库设置钩子自动更新
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6505152.html
Copyright © 2011-2022 走看看