SlideShare uma empresa Scribd logo
1 de 20
Objective-C




                  메모리 관리
                  By Changhoon Park
    Objective-C
                  http://www.wawworld.me
                                           Last Update : 2011. 08. 28

11년 10월 25일 화요일
탄생과 죽음




                              객체는 alloc 또는 new로 태어난다.



                      객체의 일생이 끝나면 그 객체가 사용하던 메모리는
                       다음에 태어날 객체를 위하여 정리되어야 한다.




             2


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                        By Changhoon Park
                                                           http://www.wawworld.me



11년 10월 25일 화요일
참조횟수 (reference counting) / 유지횟수 (retain counting)



                                            정수 값


                    객체를 사용하고 있다는 그 코드에서 객체의 참조횟수 증가
                           그 코드가 객체 사용을 다 끝내면 참조횟수 감소


                   참조횟수가 0이되면 아무도 그 객체를 사용하지 않음으로 소
                      멸되고 객체가 사용하던 메모리를 시스템에 반납




             3


                  메모리 관리    객체의 일생
                            오토릴리즈
    Objective-C
                            코코아 메모리 관리 규칙
                                                                         By Changhoon Park
                                                                            http://www.wawworld.me



11년 10월 25일 화요일
alloc / new / copy 객체의 참조횟수는 1




                               retain   참조횟수 증가

                               release 참조횟수 감소


                                   참조횟수가 0일때
                                  자동으로 메시지 전달
                                                  dealloc 객체 소멸
                                                          오버라이드 가능




             4


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                              By Changhoon Park
                                                                 http://www.wawworld.me



11년 10월 25일 화요일
관련 API




                                   - (id) retain;
                                   - (void) release;
                                   - (unsigned) retainCount;




             5


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                               By Changhoon Park
                                                                  http://www.wawworld.me



11년 10월 25일 화요일
@implementation RetainTracker

                  - (id) init
                  {
                  ! if (self = [super init]) {
                  ! !    NSLog (@"init: Retain count of %d.",
                  ! !    !      [self retainCount]);
                  ! }
                  ! return (self);
                  !
                  } // init


                  - (void) dealloc
                  {
                  ! NSLog (@"dealloc called. Bye Bye.");
                  ! [super dealloc];
                  !
                  } // dealloc

                  @end // RetainTracker




             6


                     메모리 관리    객체의 일생
                               오토릴리즈
    Objective-C
                               코코아 메모리 관리 규칙
                                                                By Changhoon Park
                                                                   http://www.wawworld.me



11년 10월 25일 화요일
int main (int argc, const char * argv[])
         {
             RetainTracker *tracker = [RetainTracker new];
             // count: 1
         !
             [tracker retain]; // count: 2   NSLog (@"%d",   [tracker   retainCount]);
             [tracker retain]; // count: 3   NSLog (@"%d",   [tracker   retainCount]);
             [tracker release]; // count: 2 NSLog (@"%d",    [tracker   retainCount]);
             [tracker release]; // count: 1 NSLog (@"%d",    [tracker   retainCount]);
             [tracker retain]; // count 2    NSLog (@"%d",   [tracker   retainCount]);
             [tracker release]; // count 1   NSLog (@"%d",   [tracker   retainCount]);
             [tracker release]; // count: 0, dealloc it
         !
             return (0);
         } // main




             7


                  메모리 관리    객체의 일생
                            오토릴리즈
    Objective-C
                            코코아 메모리 관리 규칙
                                                                                         By Changhoon Park
                                                                                            http://www.wawworld.me



11년 10월 25일 화요일
객체 소유권




                    하나 이상의 항목이 특정한 객체를 소유하고 있을때 발생




             8


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                     By Changhoon Park
                                                        http://www.wawworld.me



11년 10월 25일 화요일
엔진의 소유권은 누구인가?




             ! Engine *engine = [Engine new];

             ! [car setEngine: engine];




                                 main 도 car 도 아닌 상황....




             9


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                          By Changhoon Park
                                                             http://www.wawworld.me



11년 10월 25일 화요일
문제 1

             - (void) setEngine : (Engine * ) newEngine
             {
             ! engine = [ newEngine retain];
             }



             Engine *engine1 = [Engine new]; // count:1
             [car setEngine: engine1];!     // count: 2
             [engine1    release];!!     // count: 1

             Engine *engine2 = [Engine new]; // count: 1
             [car   setEngine: engine2];!  // engine1= count: 1
                                           // engine2= count: 2




            10


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                                  By Changhoon Park
                                                                     http://www.wawworld.me



11년 10월 25일 화요일
문제 1

             - (void) setEngine : (Engine * ) newEngine
             {
               [engine release];
             ! engine = [ newEngine retain];
             }


              Engine *engine1 = [Engine new]; // count:1
              [car setEngine: engine1];!     // count: 2
              [engine1    release];!!     // count: 1

              Engine *engine2 = [Engine new]; // count: 1
              [car   setEngine: engine2];!  // engine1= count: 0
                                            // engine2= count: 2




            11


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                                   By Changhoon Park
                                                                      http://www.wawworld.me



11년 10월 25일 화요일
문제 2
             - (void) setEngine : (Engine * ) newEngine
             {
               [engine release];
             ! engine = [ newEngine retain];
             }


             Engine *engine = [Engine new];    !// count:1
             Car   *car1 = [Car new];
             Car   *car2 = [Car new];

             [car1 setEngine: engine];!       ! // count: 2
             [engine    release];!!        ! ! // count: 1

             [car2 setEngine:[car1 engine]]; !// oops!




            12


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                              By Changhoon Park
                                                                 http://www.wawworld.me



11년 10월 25일 화요일
문제 2

             -(void) setEngine: (Engine *)newEngine {
                 [newEngine retain];
                 [engine release];
                 engine = newEngine;
             }


             Engine *engine = [Engine new];    !// count:1
             Car   *car1 = [Car new];
             Car   *car2 = [Car new];

             [car1 setEngine: engine];!       ! // count: 2
             [engine    release];!!        ! ! // count: 1

             [car2 setEngine:[car1 engine]]; !// count: 1




            13


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                              By Changhoon Park
                                                                 http://www.wawworld.me



11년 10월 25일 화요일
문제 1

             -(void) setEngine: (Engine *)newEngine {
                 [newEngine retain];
                 [engine release];
                 engine = newEngine;
             }


             Engine *engine1 = [Engine new]; // count:1
             [car setEngine: engine1];!    // count:2
             [engine1    release];! !      // count: 1


             Engine *engine2 = [Engine new]; // engine2 = count: 1
             [car   setEngine: engine2];!   // engine2 = count: 2
             ! ! ! ! ! ! ! ! ! ! !           // engine1 = count: 1




            14


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                                     By Changhoon Park
                                                                        http://www.wawworld.me



11년 10월 25일 화요일
접근자의 참조횟수 관리


             - (void) setEngine : (Engine * ) newEngine
             {
             ! engine = [ newEngine retain];
             }




             Engine *engine1 = [Engine new]; // count:1
             [car setEngine: engine1];!     // count: 2
             [engine1    release];! !       // count: 1

             Engine *engine2 = [Engine new]; // count: 1
             [car   setEngine: engine2];!     // count: 2




            15


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                            By Changhoon Park
                                                               http://www.wawworld.me



11년 10월 25일 화요일
description의 memory leak



             -(NSString *) description
             {
             ! NSString *description;
             ! description=[[NSString alloc] initWithFormat: @"I am %d years old",4];
             ! return (description);
             }




             NSString *desc = [someObject description];
             NSLog(@"%@",desc);
             [desc release];




            16


                  메모리 관리    객체의 일생
                            오토릴리즈
    Objective-C
                            코코아 메모리 관리 규칙
                                                                                    By Changhoon Park
                                                                                        http://www.wawworld.me



11년 10월 25일 화요일
NSObject의 autorelease pool




             -(id) autorelease;




                  어떤 객체에 autorelease를 보내면 그 객체가 NSAutoreleasePool에 추가
                     풀이 사라질 때, 풀에 있던 모든 객체에 릴리즈 메시지 전달




            17


                    메모리 관리   객체의 일생
                             오토릴리즈
    Objective-C
                             코코아 메모리 관리 규칙
                                                                  By Changhoon Park
                                                                     http://www.wawworld.me



11년 10월 25일 화요일
description의 memory leak



             -(NSString *) description
             {
             ! NSString *description;
             ! description=[[NSString alloc] initWithFormat: @"I am %d years old",4];
             ! return ([description autorelease]);
             }




             NSLog(@"%@",[someObject description]);




            18


                  메모리 관리    객체의 일생
                            오토릴리즈
    Objective-C
                            코코아 메모리 관리 규칙
                                                                                    By Changhoon Park
                                                                                        http://www.wawworld.me



11년 10월 25일 화요일
AutoreleasePool 생성하기




             NSAutoreleasePool* pool;
             pool = [[NSAutoreleasePool alloc] init];

             /* 여기서 부터 인련의 작업을 수행한다.
              임시객체에게 autorelease 메세지를 보낸다.
              */

             [pool release]     /* 인스턴스는 여기서 해제 된다.      */




            19


                  메모리 관리   객체의 일생
                           오토릴리즈
    Objective-C
                           코코아 메모리 관리 규칙
                                                              By Changhoon Park
                                                                 http://www.wawworld.me



11년 10월 25일 화요일
실제 풀 사용하기



             int main (int argc, const char * argv[])
             {
                 NSAutoreleasePool *pool;
                 pool = [[NSAutoreleasePool alloc] init];
             !
                 RetainTracker *tracker;
                 tracker = [RetainTracker new]; ! // count:    1
             !
                 [tracker retain]; !   !   !   !   // count:   2
                 [tracker autorelease]; ! !    !   // count:   still 2
                 [tracker release]; ! !    !   !   // count:   1
             !
                 NSLog (@"releasing pool");
                 [pool release];
                 // gets nuked, sends release to tracker
             !
                 return (0);
             }




            20


                   메모리 관리       객체의 일생
                                오토릴리즈
    Objective-C
                                코코아 메모리 관리 규칙
                                                                         By Changhoon Park
                                                                            http://www.wawworld.me



11년 10월 25일 화요일

Mais conteúdo relacionado

Destaque

2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인
홍준 김
 
Green family
Green familyGreen family
Green family
prplan
 
20081020 창녕군발표자료 출력용
20081020 창녕군발표자료 출력용20081020 창녕군발표자료 출력용
20081020 창녕군발표자료 출력용
seekly
 
경영의교양을읽는다
경영의교양을읽는다경영의교양을읽는다
경영의교양을읽는다
Yeounjoon Kim
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practices
Hyunil Shin
 

Destaque (19)

11.조승연 - 깜찍한 승연이의 인턴십 이야기
11.조승연 - 깜찍한 승연이의 인턴십 이야기11.조승연 - 깜찍한 승연이의 인턴십 이야기
11.조승연 - 깜찍한 승연이의 인턴십 이야기
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
 
소셜미디어 시대의 위기 관리
소셜미디어 시대의 위기 관리소셜미디어 시대의 위기 관리
소셜미디어 시대의 위기 관리
 
2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인
 
20110504 wsp self-empowerment_v1.0
20110504 wsp self-empowerment_v1.020110504 wsp self-empowerment_v1.0
20110504 wsp self-empowerment_v1.0
 
Game ai.fsm.01
Game ai.fsm.01Game ai.fsm.01
Game ai.fsm.01
 
세바시 15분 발명의 즐거움 inventaining - 황성재 카이스트 박사과정
세바시 15분 발명의 즐거움 inventaining - 황성재 카이스트 박사과정세바시 15분 발명의 즐거움 inventaining - 황성재 카이스트 박사과정
세바시 15분 발명의 즐거움 inventaining - 황성재 카이스트 박사과정
 
정부3.0_국민디자인단_청소년 창의성 계발을 위한 융합형 발명·디자인 교육과정 개발
정부3.0_국민디자인단_청소년 창의성 계발을 위한 융합형 발명·디자인 교육과정 개발정부3.0_국민디자인단_청소년 창의성 계발을 위한 융합형 발명·디자인 교육과정 개발
정부3.0_국민디자인단_청소년 창의성 계발을 위한 융합형 발명·디자인 교육과정 개발
 
Green family
Green familyGreen family
Green family
 
20081020 창녕군발표자료 출력용
20081020 창녕군발표자료 출력용20081020 창녕군발표자료 출력용
20081020 창녕군발표자료 출력용
 
소셜 마케팅 관리 필수 아이템 - 소셜미디어관리소프트웨어 Enpick.com
소셜 마케팅 관리 필수 아이템 - 소셜미디어관리소프트웨어 Enpick.com소셜 마케팅 관리 필수 아이템 - 소셜미디어관리소프트웨어 Enpick.com
소셜 마케팅 관리 필수 아이템 - 소셜미디어관리소프트웨어 Enpick.com
 
경영의교양을읽는다
경영의교양을읽는다경영의교양을읽는다
경영의교양을읽는다
 
소풍
소풍소풍
소풍
 
[북리뷰] 데이터포인트5장
[북리뷰] 데이터포인트5장[북리뷰] 데이터포인트5장
[북리뷰] 데이터포인트5장
 
차세대 기기
차세대 기기차세대 기기
차세대 기기
 
[51st KUG PP] 아이폰으로 완성된 나의 디지털 라이프
[51st KUG PP] 아이폰으로 완성된 나의 디지털 라이프[51st KUG PP] 아이폰으로 완성된 나의 디지털 라이프
[51st KUG PP] 아이폰으로 완성된 나의 디지털 라이프
 
소셜 미디어 시대의 위기 관리 PR
소셜 미디어 시대의 위기 관리 PR소셜 미디어 시대의 위기 관리 PR
소셜 미디어 시대의 위기 관리 PR
 
생각정리 세미나 - 아날로그와 디지탈 편 ( 몰스킨노트 이야기) 20121124
생각정리 세미나 - 아날로그와 디지탈 편 ( 몰스킨노트 이야기)  20121124생각정리 세미나 - 아날로그와 디지탈 편 ( 몰스킨노트 이야기)  20121124
생각정리 세미나 - 아날로그와 디지탈 편 ( 몰스킨노트 이야기) 20121124
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practices
 

Mais de Hoseo University (9)

Esl podcast 743 – writing a story
Esl podcast 743 – writing a storyEsl podcast 743 – writing a story
Esl podcast 743 – writing a story
 
목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동
 
FoundationKit
FoundationKitFoundationKit
FoundationKit
 
Raven
RavenRaven
Raven
 
프로젝트 구성
프로젝트 구성프로젝트 구성
프로젝트 구성
 
구성(Composition)
구성(Composition)구성(Composition)
구성(Composition)
 
Objective-C에서의 OOP
Objective-C에서의 OOPObjective-C에서의 OOP
Objective-C에서의 OOP
 
Dt2210.01.syllabus
Dt2210.01.syllabusDt2210.01.syllabus
Dt2210.01.syllabus
 
Dt3160.01
Dt3160.01Dt3160.01
Dt3160.01
 

Memory 관리

  • 1. Objective-C 메모리 관리 By Changhoon Park Objective-C http://www.wawworld.me Last Update : 2011. 08. 28 11년 10월 25일 화요일
  • 2. 탄생과 죽음 객체는 alloc 또는 new로 태어난다. 객체의 일생이 끝나면 그 객체가 사용하던 메모리는 다음에 태어날 객체를 위하여 정리되어야 한다. 2 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 3. 참조횟수 (reference counting) / 유지횟수 (retain counting) 정수 값 객체를 사용하고 있다는 그 코드에서 객체의 참조횟수 증가 그 코드가 객체 사용을 다 끝내면 참조횟수 감소 참조횟수가 0이되면 아무도 그 객체를 사용하지 않음으로 소 멸되고 객체가 사용하던 메모리를 시스템에 반납 3 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 4. alloc / new / copy 객체의 참조횟수는 1 retain 참조횟수 증가 release 참조횟수 감소 참조횟수가 0일때 자동으로 메시지 전달 dealloc 객체 소멸 오버라이드 가능 4 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 5. 관련 API - (id) retain; - (void) release; - (unsigned) retainCount; 5 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 6. @implementation RetainTracker - (id) init { ! if (self = [super init]) { ! ! NSLog (@"init: Retain count of %d.", ! ! ! [self retainCount]); ! } ! return (self); ! } // init - (void) dealloc { ! NSLog (@"dealloc called. Bye Bye."); ! [super dealloc]; ! } // dealloc @end // RetainTracker 6 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 7. int main (int argc, const char * argv[]) { RetainTracker *tracker = [RetainTracker new]; // count: 1 ! [tracker retain]; // count: 2 NSLog (@"%d", [tracker retainCount]); [tracker retain]; // count: 3 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count: 2 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count: 1 NSLog (@"%d", [tracker retainCount]); [tracker retain]; // count 2 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count 1 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count: 0, dealloc it ! return (0); } // main 7 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 8. 객체 소유권 하나 이상의 항목이 특정한 객체를 소유하고 있을때 발생 8 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 9. 엔진의 소유권은 누구인가? ! Engine *engine = [Engine new]; ! [car setEngine: engine]; main 도 car 도 아닌 상황.... 9 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 10. 문제 1 - (void) setEngine : (Engine * ) newEngine { ! engine = [ newEngine retain]; } Engine *engine1 = [Engine new]; // count:1 [car setEngine: engine1];! // count: 2 [engine1 release];!! // count: 1 Engine *engine2 = [Engine new]; // count: 1 [car setEngine: engine2];! // engine1= count: 1 // engine2= count: 2 10 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 11. 문제 1 - (void) setEngine : (Engine * ) newEngine { [engine release]; ! engine = [ newEngine retain]; } Engine *engine1 = [Engine new]; // count:1 [car setEngine: engine1];! // count: 2 [engine1 release];!! // count: 1 Engine *engine2 = [Engine new]; // count: 1 [car setEngine: engine2];! // engine1= count: 0 // engine2= count: 2 11 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 12. 문제 2 - (void) setEngine : (Engine * ) newEngine { [engine release]; ! engine = [ newEngine retain]; } Engine *engine = [Engine new]; !// count:1 Car *car1 = [Car new]; Car *car2 = [Car new]; [car1 setEngine: engine];! ! // count: 2 [engine release];!! ! ! // count: 1 [car2 setEngine:[car1 engine]]; !// oops! 12 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 13. 문제 2 -(void) setEngine: (Engine *)newEngine { [newEngine retain]; [engine release]; engine = newEngine; } Engine *engine = [Engine new]; !// count:1 Car *car1 = [Car new]; Car *car2 = [Car new]; [car1 setEngine: engine];! ! // count: 2 [engine release];!! ! ! // count: 1 [car2 setEngine:[car1 engine]]; !// count: 1 13 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 14. 문제 1 -(void) setEngine: (Engine *)newEngine { [newEngine retain]; [engine release]; engine = newEngine; } Engine *engine1 = [Engine new]; // count:1 [car setEngine: engine1];! // count:2 [engine1 release];! ! // count: 1 Engine *engine2 = [Engine new]; // engine2 = count: 1 [car setEngine: engine2];! // engine2 = count: 2 ! ! ! ! ! ! ! ! ! ! ! // engine1 = count: 1 14 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 15. 접근자의 참조횟수 관리 - (void) setEngine : (Engine * ) newEngine { ! engine = [ newEngine retain]; } Engine *engine1 = [Engine new]; // count:1 [car setEngine: engine1];! // count: 2 [engine1 release];! ! // count: 1 Engine *engine2 = [Engine new]; // count: 1 [car setEngine: engine2];! // count: 2 15 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 16. description의 memory leak -(NSString *) description { ! NSString *description; ! description=[[NSString alloc] initWithFormat: @"I am %d years old",4]; ! return (description); } NSString *desc = [someObject description]; NSLog(@"%@",desc); [desc release]; 16 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 17. NSObject의 autorelease pool -(id) autorelease; 어떤 객체에 autorelease를 보내면 그 객체가 NSAutoreleasePool에 추가 풀이 사라질 때, 풀에 있던 모든 객체에 릴리즈 메시지 전달 17 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 18. description의 memory leak -(NSString *) description { ! NSString *description; ! description=[[NSString alloc] initWithFormat: @"I am %d years old",4]; ! return ([description autorelease]); } NSLog(@"%@",[someObject description]); 18 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 19. AutoreleasePool 생성하기 NSAutoreleasePool* pool; pool = [[NSAutoreleasePool alloc] init]; /* 여기서 부터 인련의 작업을 수행한다. 임시객체에게 autorelease 메세지를 보낸다. */ [pool release] /* 인스턴스는 여기서 해제 된다. */ 19 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일
  • 20. 실제 풀 사용하기 int main (int argc, const char * argv[]) { NSAutoreleasePool *pool; pool = [[NSAutoreleasePool alloc] init]; ! RetainTracker *tracker; tracker = [RetainTracker new]; ! // count: 1 ! [tracker retain]; ! ! ! ! // count: 2 [tracker autorelease]; ! ! ! // count: still 2 [tracker release]; ! ! ! ! // count: 1 ! NSLog (@"releasing pool"); [pool release]; // gets nuked, sends release to tracker ! return (0); } 20 메모리 관리 객체의 일생 오토릴리즈 Objective-C 코코아 메모리 관리 규칙 By Changhoon Park http://www.wawworld.me 11년 10월 25일 화요일