OC语法基础(7)—ARC机制

ARC机制

//  Person.h

#import

 

@interface Person : NSObject

 

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

- (void)dealloc

{

//    [super dealloc];不能够在调用

//      releae retain ARC机制中不能够在去手动调用

    NSLog(@"Person 被释放了");

}

 

@end

//  main.m

//ARC简单,不用程序员在去管理内存

//1.强指针 Strong

//2.弱指针 weak

 

//只要有强指针指向一个对象,那么系统就不会回收该对象

//只要没有强指针指向对象,系统立即回收该对象

 

//弱指针不影响,对象被回收

 

//默认情况下,所有的指针都是强指针类型

 

#import

#import "Person.h"

 

void test(Person * v)//Person * v =

{

    v = nil;

}//

 

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

{

 

 

       

    

   

   

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

   

    test(p);

   

    p = nil;

  

    NSLog(@"adfasdf");

   

   

   

   

 

   

    return 0;

}

ARC机制下组合关系(strong weak)

//  Car.h

#import

 

@interface Car : NSObject

 

@end

//  Car.m

#import "Car.h"

 

@implementation Car

- (void)dealloc

{

    NSLog(@"Car 被销毁了");

}

@end

//  Person.h

// 本文件重在说明strong Weak的区别:

// 可以这样理解:Strong 指针会使所指对象引用计数加一,而weak不会,它只是普通指针。因此

//  强直阵类型的对象,会影响对象回收,弱指针类型的对象,不会影响对象的回收

#import

#import "Car.h"

 

@interface Person : NSObject

 

//@property(nonatomic,retain)Car * car;

//ARC机制 strong 对象,手动内存管理的retain关键字,(一定能够都是应用在对象类型变量上)

//ARC机制中的 weak 对象手动内存管理的assign关键字,(一定能够都是应用在对象类型变量上)

@property (nonatomic,strong)Car * car;//强直阵类型的对象,会影响对象回收

@property (nonatomic,weak)Car * car2;// 弱指针类型的对象,不会影响对象的回收

//@property (nonatomic,assign)Car * car3;//造成迷惑,会导致许多程序员搞不清这个变量到底是stong类型的还是weak类型

 

@property (nonatomic,strong)NSString * name;

@property (nonatomic,strong)NSString * idCard;

 

//ARC机制下 基本数据类型的@property参数使用,与手动内存管理完全一致

@property (nonatomic,assign)int age;

 

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

-(void)dealloc

{

    NSLog(@"person 被销毁了");

}

 

@end

//  main.m

#import

 

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

{

 

    @autoreleasepool {

       

       

    }

    return 0;

}

 

ARC类循环应用问题

//  Person.h

#import

#import "Car.h"

 

@interface Person : NSObject

 

@property (nonatomic,strong)Car * car;

 

@end

//  Person.m

#import "Person.h"

 

@implementation Person

 

-(void)dealloc

{

    NSLog(@"Person 被销毁了");

}

 

@end

//  Car.h

#import

//#import "Person.h"

@class Person;

 

@interface Car : NSObject

 

//@property (nonatomic,strong)Person * p;

 

//当出现类循环应用的时候,只需要把一方面的Strong引用改为weak,并且在.h文件中使用@class 类名的方式,通知.h文件类的存在

@property (nonatomic,weak)Person * p;

 

@end

//  Car.m

 

#import "Car.h"

#import "Person.h"

 

@implementation Car

 

- (void)dealloc

{

    NSLog(@"Car 被销毁了");

}

 

@end

 

//  main.m

#import

#import "Person.h";

 

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

{

 

    @autoreleasepool {

       

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

       

        Car * car = [[Car alloc] init];

       

        [p setCar:car];

       

        [car setP:p];

       

        p = nil;

       

        car = nil;

       

        NSLog(@"agfadsgf");

    }

    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值