97,ARC基本概念以及内存管理

Person.h:

#import

@class Dog;


@interface Person : NSObject


@property(nonatomic,strong) Dog *dog;


@end


Person.m:

#import "Person.h"

#import "Dog.h"


@implementation Person


-(void)dealloc{

    NSLog(@"%s",__func__);

}


@end


Dog.h:

#import

@class Person;


@interface Dog : NSObject


//ARC中,如果保存对象不要用assign,用weak

//assign是专门用于保存基本数据类型的

@property(nonatomic,weak) Person *owner;


@end


Dog.m:

#import "Dog.h"

#import "Person.h"


@implementation Dog


-(void)dealloc{

    NSLog(@"%s",__func__);

}


@end


main:

#import

#import "Person.h"

#import "Dog.h"


/*

 1,什么是ARC

    >ARCAutomatic Reference Counting)自动引用计数 ,ARC是编译器特性。

    >在工程中使用ARC非常简单:只需要像往常那样写代码,不用写retain,releaseautorelease而已,因为ARC开启时,编译器就会自动在代码合适的地方的地方插入retainreleaseautorelease

 2ARC的注意点和优点

    >注意点:ARC是编译器特性,而不是运行时特性。

    >优点:

        -完全消除了手动管理内存的烦恼,让程序猿更加专心于app的业务实现

        -基本上能够避免内存泄露

        -有时还能更加快速,因为编译器害可以执行某一些优化

 3ARC的判断原则

    >原则:只要还有一个强指针指向对象,对象就会保存在内存

    即没有强指针指向对象,对象就会被自动回收

    >强指针:默认所有的指针变量都是强指针,用__strong修饰

    eg__strong Person *person = [[Person alloc]init];

    >弱指针:用__weak修饰

    eg__weak Person *person = [[Person alloc]init];

    注意:在编程中,别用弱指针保存对象,因为对象在创建的时候,就会被立即销毁

 4,如果一个对象需要提前销毁,就让强指针指向nil,对象就会被回收了,可以按照下面编写;

    Person *person = [[Person alloc]init];

    person = nil;

 5,在ARC中,也存在MRC同样的问题:A拥有B对象,B拥有A对象,有强指针指向而不释放对象

 */


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        Person *person = [[Person alloc]init];

        Dog *dog = [[Dog alloc]init];

        person.dog =dog;

        dog.owner = person;

    }

    return 0;

}


//2015-12-17 15:20:53.651 4ARC基本概念以及内存管理[2312:239735] -[Person dealloc]

//2015-12-17 15:20:53.652 4ARC基本概念以及内存管理[2312:239735] -[Dog dealloc]

//Program ended with exit code: 0








你可能感兴趣的:(OC)