• 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
  • 相关阅读:
    php解决前端调接口跨域问题
    降低token 被盗风险安全问题
    u盘怎么解除写保护状态,u盘写保护怎么去掉
    安装vsftpd时出现错误
    对于vim 编译器的设置
    Vim 怎么设置显示行号,永久性显示行号
    Ubuntu系统设置过程中信息显示不全
    控制文件夹名显示的长短
    linux中好玩的游戏
    安装VMware Tools
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6505152.html
Copyright © 2020-2023  润新知