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;

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

 

posted @ 2017-03-05 13:37  Godfunc  阅读(285)  评论(0编辑  收藏  举报