Objective-c ARC机制概述

来源:互联网 发布:元数据由什么存储 编辑:程序博客网 时间:2024/05/29 12:33

/*

 Objective-c ARC机制

 

    1> ARC机制概述:

 

            ARC,Automatic Reference Counting,自动引用计数器.ARCLLVM3.0的一项特性,解决了手动管理内存的麻烦.

        

            ARC机制下,永远不需要写retain,release,autorelease,永远不需要手动的调用dealloc这几个关键字,这是ARC的最基本原则.

        

            ARCLLVM3.0的一项特性,解决了手动管理内存的麻烦.ARC开启的时候,编译器会自动的在适当的地方插入retain,release,autorelease代码.

 

    

    2> ARC机制下,对象是如何被释放的.

 

            本质:当对象的引用计数器的值是0的时候,自动释放.

 

            ARC:ARC机制下,永远不需要写retain,release,autorelease,编译器会自动的在适当的地方插入retain,release,autorelease代码.

 

            表象:一个对象只要没有强指针指向,这个对象就会被立即会收掉.

 

    3> 强指针和弱指针

 

            强指针:默认情况下,我们声明一个指针就是强指针.也可以使用__strong来修饰声明的指针是强指针.

                :__strong YYPerson *xiaoming;

 

            弱指针:使用__weak标识的指针就叫做弱指针.

                :__weak YYPerson *xiaoming;

 

            ARC机制下,一个对象只要没有强指针指向,这个对象就会被立即会收掉.

 

 */

#import <Foundation/Foundation.h>


#pragma mark -

//人类的声明

@interface YYPerson : NSObject


@property NSString *name;


- (void)run;


//自定义构造方法

- (instancetype)initWithName:(NSString *)name;


+ (instancetype)personWithName:(NSString *)name;


@end


//人类的实现

@implementation YYPerson


//重写dealloc监视对象的回收

- (void)dealloc

{

    NSLog(@"%@释放了",_name);

}


- (void)run

{

    NSLog(@"%@在跑步!",_name);

}

//自定义构造方法

- (instancetype)initWithName:(NSString *)name

{

    if(self = [superinit])

    {

        self.name = name;

    }

    return self;

}


+ (instancetype)personWithName:(NSString *)name

{

    return [[selfalloc]initWithName:name];

}


@end

#pragma mark -

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

    

    //创建人对象并初始化

    YYPerson *xiaoming = [[YYPersonalloc ]initWithName:@"小明"];

    

    //调用方法

    [xiaoming run];

    

    

    return 0;

}

0 0
原创粉丝点击