ios 메모리 관리 1-retain과release의 간단한 사용

메모리 관리
범위:
  • NSObject를 상속받은 모든 객체는 기본 데이터 유형에 유효하지 않습니다
  • 원리:
  • 각 개체 내부에 연관된 정수가 저장되어 있는데, 이를 인용계수기(auto reference count)
  • 라고 한다.
  • alloc, new 또는copy를 사용하여 대상을 만들 때마다 대상의 인용계수기는 1
  • 로 설정됩니다
  • 대상에게retain 메시지를 보내면 인용 계수기 값 +1
  • 대상에release 메시지를 보내면 계수기 값 -1
  • 을 인용할 수 있습니다.
  • 대상의 인용 계수기 값이 0이면 소각되고 사용된 메모리가 시스템에서 회수되며 OC도 자동으로 대상에게 dealloc 메시지를 보냅니다.일반적으로 dealloc 방법을 다시 써서 관련 자원을 방출합니다.dealloc 방법을 직접 사용하지 마십시오.
  • 대상에게retainCount 메시지를 보내서 현재 인용 계수기 값을 얻을 수 있습니다.

  • 메모리 관리 지침
  • 누가 창립하고 누가 석방(누가 오염하고 누가 관리)한다.alloc, new, 또는 (mutable) copy를 통해 대상을 만들려면,release 또는 autorelease를 호출해야 합니다.혹은 네가 만든 것이 아니면 네가 석방할 필요가 없다
  • 일반적으로 alloc, new 또는copy를 제외한 방법으로 만든 대상은 autorelease(autorelease는 메모리 방출을 지연시키는 것으로 수동으로 방출하지 않아도 시스템이 언제 방출해야 하는지 알 수 있다.)
  • 누구retain,누구release.retain을 호출하기만 하면, 이 대상이 어떻게 생성되었든지 간에release
  • 를 호출해야 합니다
    다음은 테스트 코드입니다.
    'Command Line Tool' 기반 프로젝트를 새로 만듭니다. '메모리 관리 1-retain과 Release의 간단한 사용', Student 클래스를 새로 만듭니다.
    Student.h
    //
    //  Student.h
    //      1-retain release     
    //
    //  Created by Rio.King on 13-8-26.
    //  Copyright (c) 2013  Rio.King. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface Student : NSObject
    {
        int age;
    }
    
    @property int age;
    
    @end
    

    Student.m
    //
    //  Student.m
    //      1-retain release     
    //
    //  Created by Rio.King on 13-8-26.
    //  Copyright (c) 2013  Rio.King. All rights reserved.
    //
    
    #import "Student.h"
    
    @implementation Student
    
    @synthesize age;
    
    //  dealloc  ,      (auto reference count)       ,  ,   .h                。
    - (void)dealloc{
        
        //insert your code here...
        NSLog(@"%@    ",self);
        
        [super dealloc];//     super dealloc  ,           
    }
    
    @end
    

    main.m
    //
    //  main.m
    //      1-retain release     
    //
    //  Created by Rio.King on 13-8-26.
    //  Copyright (c) 2013  Rio.King. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "Student.h"
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            
            Student *stu = [[Student alloc]init];//alloc  ,      1
            //Student *stu = [[[Studnet alloc]init] autorelease]; //               stu         ,      release   
            
            //z     
            NSLog(@"count:%zi", [stu retainCount]);
            
            [stu retain];//       2
            NSLog(@"count:%zi", [stu retainCount]);
            
            [stu release];//       1
            NSLog(@"count:%zi", [stu retainCount]);        
            
            [stu release];//release  ,      1,  0,,,     dealloc  
            
        }
        return 0;
    }

    실행 결과:
    2013-08-26 10:53:14.506 메모리 관리 1-retain과release의 간단한 사용 [754:303] count:1
    2013-08-26 10:53:14.508 메모리 관리 1-retain과release의 간단한 사용 [754:303]count:2
    2013-08-26 10:53:14.509 메모리 관리 1-retain과release의 간단한 사용 [754:303] count:1
    2013-08-26 10:53:14.509 메모리 관리 1-retain과release의 간단한 사용 [754:303] 이 소각됨

    좋은 웹페이지 즐겨찾기