08일차 OC 언어(21): 단일 예제 ARC 및 MRC 쓰기

2626 단어
4
  • 내일까지 기다리지 마세요. 내일은 너무 멀어요. 오늘 행동하세요

  • 수독: 이 문장을 다 보고 나서 당신은 무엇을 할 수 있습니까?
    ARC 및 MRC 의 단일 인스턴스 작업 처리
    학습 전: 당신은 반드시 무엇을 할 줄 알아야 합니까?(이곳에서 나는 이미 네가 C 언어의 기초를 갖추고 있다는 것을 묵인했다)
    ARC란, MRC란?
    노트
      、      
        1.        
        2.  copy,mutableCopy   
        3.MRC    retain、release、retainCount  
    
    

    코드
    main.m
    #pragma mark 21-  ARC MRC  
    #pragma mark -   
    #import 
    #pragma mark  
    #import "Tools.h"
    #pragma mark - main  
    int main(int argc, const char * argv[])
    {
        /*
        //                       
        //                     
        Tools *t1 = [[Tools alloc]init]; //      allocWithZone
        Tools *t2 = [Tools new];
        Tools *t3 = [Tools shareInstance];
        Tools *t4 = [Tools copy];
        Tools *t5 = [Tools mutableCopy];
        NSLog(@"%p,%p,%p,%p,%p",t1,t2,t3,t4,t5);
         */
    
        Tools *t = [[Tools alloc]init];
        [t retain];
        [t retain];
        [t retain];
    
        NSLog(@"t = %p",t);
        NSLog(@"retainCount = %lu",[t retainCount]);
        [t release];
    
        Tools *t1 = [Tools shareInstance];
        NSLog(@"t1 = %p",t1);
        NSLog(@"retainCount = %lu",[t1 retainCount]);
        [t1 release];
        
        
        return 0;
    }
    
    

    Person
    >>>.h
    #import 
    
    @interface Tools : NSObject
    //                            
    //                       share  ,  default  
    + (instancetype)shareInstance;
    @end
    
    >>>.m
    #import "Tools.h"
    
    @implementation Tools
    + (instancetype)shareInstance
    {
        Tools *instance = [[self alloc]init];
        return instance;
    }
    
    static Tools *_instance = nil;
    + (instancetype)allocWithZone:(struct _NSZone *)zone
    {
    #pragma 1.                 
        /*
        NSLog(@"%s",__func__);
        //              ,                        
        if (_instance == nil) {
            NSLog(@"       ");
            _instance = [super allocWithZone:zone];
        }
        return _instance;
         */
        //                  
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super allocWithZone:zone];
        });
        return _instance;
        
    }
    
    - (id)copyWithZone:(NSZone *)zone
    {
        return _instance;
    }
    
    - (id)mutableCopyWithZone:(NSZone *)zone
    {
        return _instance;
    }
    
    #pragma mark MRC     
    - (oneway void)release
    {
        //                   
        //            
    
    }
    - (instancetype)retain
    {
        return _instance;
    }
    - (NSUInteger)retainCount
    {
    //    return 1;
        //    :            ,               retainCount = 1;
        //            
        return MAXFLOAT;
    }
    @end
    
    

    좋은 웹페이지 즐겨찾기