oc56--ARC多个对象的内存管理

oc56--ARC多个对象的内存管理
//  main.m
//  ARC中多个对象的内存管理:ARC的内存管理就是MRC的内存管理(一个对象释放的时候,必然会把它里面的对象释放),只不过一个是Xcode加的代码,一个是我们自己加的代码;
//
//  ARC单个对象的内存管理:不使用的时候就置为nil,该对象没有引用就会立即释放。
//  MRC的时候,set一个对象的时候就把这个对象retain一次,当这个对象释放的时候就把它的对象属性release一次。
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {

    Person *p = [[Person alloc] init];
    Dog *d = [[Dog alloc] init];
    p.dog = d;
    d.owner = p;
    //d.owner = [[Person alloc] init];
    
    d = nil;  //d = nil才会将d指向的对象里面的计数器减一,d自动销毁时计数器是不会减一的。
    
    NSLog(@"-----");
    
    p = nil;//不使用对象的时候就置位nil。这是ARC的,MRC是A对象释放的时候就把A里面的B对象也释放。
    
    return 0;
}
oc56--ARC多个对象的内存管理
oc56--ARC多个对象的内存管理
//  Person.h

#import <Foundation/Foundation.h>

@class Dog;

@interface Person : NSObject

// MRC, A对象想拥有B对象, 需要对B对象进行一次retain
//      A对象不用B对象了, 需要对B对象进行一次release
//      property的时候进行retain, dealloc的时候进行release


// ARC, A对象想拥有B对象, 那么就需要用一个强指针指向B对象
//      A对象不用B对象了, 什么都不需要做, 编译器会自动帮我们做


// 在ARC中保存一个对象用strong, 相当于MRC中的retain
@property(nonatomic, strong)Dog *dog;

@end
oc56--ARC多个对象的内存管理
oc56--ARC多个对象的内存管理
//
//  Person.m
#import "Person.h"

@implementation Person


- (void)dealloc
{
    NSLog(@"%s", __func__);
}
@end
oc56--ARC多个对象的内存管理
oc56--ARC多个对象的内存管理
//
//  Dog.h

#import <Foundation/Foundation.h>

@class Person;

@interface Dog : NSObject

@property(nonatomic, strong)Person *owner;
//@property(nonatomic, assign)Person *owner;// 在ARC中如果保存对象不要用assign, 用weak,assign是专门用于保存基本数据类型的, 如果保存对象用weak

//@property(nonatomic, weak)Person *owner;   用于a,b对象的相互引用。
@end
oc56--ARC多个对象的内存管理
oc56--ARC多个对象的内存管理
//
//  Dog.m

#import "Dog.h"

@implementation Dog
- (void)dealloc
{
    NSLog(@"%s", __func__);
}
@end
oc56--ARC多个对象的内存管理

 

ARC中的string,相当于MRC中的retain

ARC中的weak,相当于MRC中的assign

ARC中的assign,用于基本数据类型,跟MRC中的assign一样。


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7435404.html,如需转载请自行联系原作者

上一篇:[新手指南参考]阿里云服务器ecs实例选择(地域+CPU+操作系统+带宽)


下一篇:阿里云GPU云服务器抢占式实例大幅度降低GPU云服务器实例成本