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
  • 相关阅读:
    MySQL调优篇 | 逻辑架构解读(1)
    SQLPlus 在连接时通常有四种方式
    Oracle解决索引碎片功能
    windows2003 ftp 无法下载 解决
    bat记录
    ACCESS字符串操作函数
    缓存和RAID如何提高磁盘IO性能
    TortoiseSVN 命令 (命令行执行工具)
    在RHEL5下实现磁盘分区和磁盘配额
    PS 命令详解
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6505152.html
Copyright © 2011-2022 走看看