검색결과 리스트
메모리관리에 해당되는 글 1건
- 2012.04.03 아이폰 수동 메모리 관리 기초내용
글
아이폰 수동 메모리 관리와 관련된 기초적인 내용.
그냥 읽으니깐 머리 속에 잘 안 들어와서 정리하는 겸 포스팅!
클래스/프로토콜 |
메서드 이름 |
의미 |
NSObject Protocol |
retainCount |
객체 혹은 인스턴스 변수가 특정 메모리 공간을 참조하고 있는가를 나타내주는 정수인 레퍼런스 참조 횟수 값을 저장. |
NSObject Class | alloc | 생성된 객체에 메모리 공간을 할당. 객체에 메모리가 할당되면 retainCount 메서드에는 1이라는 값이 저장됨. |
NSObject Protocol | retain |
객체가 메모리 공간을 참조하고 있다는 사실을 아이폰에 알림. 메모리 주소는 가지고 있으나 메모리 공간을 사용할 수 없는 어떤 객체가 retain 메서드로 메모리 공간을 참ㅁ조하면 retainCount 메서드의 값은 1만큼 증가. |
NSObject Protocol | release |
객체가 현재 참조하는 메모리 공간을 더는 참조하지 말라는 명령을 내림. 실제로 release 메서드는 retainCount 메서드의 값을 1만큼 감소시킴. |
NSObject Class | dealloc |
메모리 공간을 참조하고 있는 모든 객체가 더는 해당 메모리 공간을 사용하지 말라는 명령을 내림. 어떤 조건이든 retainCount 메서드의 값이 0이 됨. |
<참조 횟수를 관리하는 메서드>
alloc 메서드와 init 메서드를 통해서 하나의 객체가 생성되면, 사용자는 retain 메서드로 메시지를 보내 새로 생성된 객체가 메모리 공간을 참조하고 이를 사용할 권한을 가지고 있음을 알려주어야 한다(소유권). 또한 release 메서드는 객체가 지정된 메모리 공간을 참조할 필요가 없다는 것을 알려준다(소유권 반환). 정리하면 아래와 같다.
1. 객체의 참조 횟수 값이 1 또는 그 이상일 경우 아이폰은 메모리 공간을 소유하고 사용할 수 있다. 2. 객체의 참조 횟수 값이 0이 될 경우, 아이폰은 객체의 메모리 공간에 대한 소유권을 반환받아 할당되었던 메모리 공간을 회수한다. |
객체의 메모리 할당, 참조, 반환 과정에 따른 참조 횟수의 변화를 보자.
먼저 Foo 클래스를 인스턴스화 하고, 메모리 공간을 할당한 첫 번째 객체 myFooOne을 만들어보자.
Foo * myFooOne = [[Foo alloc] init]; //retainCount = 1 |
이때 myFooOne 객체의 참조 횟수 값은 1이다. 이제 myFooOne 객체를 참조하는 두 번째 객체인 myFooTwo를 생성해보자.
Foo * myFooTwo = myFooOne; //retainCount = 1 [myFooTwo retain]; //retainCount = 2 |
첫 번째 줄은 myFooTwo 객체가 Foo 클래스를 인스턴스화 했으며 myFooOne 객체를 참조하도록 한다. 하지만 myFooOne 객체의 메모리 공간을 참조한다는 사실을 아이폰이 알고 있지는 않다. 따라서 메모리 공간의 참조 횟수 값은 여전히 1이다.
두 번째 줄에서는 retain 메서드를 사용하여 myFooTwo 객체가 myFooOne 객체와 같은 메모리 공간을 사용한다는 메시지를 myFooTwo 객체에 보낸다. 따라서 해당 메모리 공간의 참조 횟수 값은 2가 된다.
이제 myFooOne 객체와 myFooTwo 객체가 더 이상 필요하지 않다고 생가해보자. 이럴 때 사용자는 release 메서드를 사용하여 더는 해당 메모리 주소와 공간을 참조하지 않는다는 메시지를 myFooOne 객체와 myFooTwo 객체에 보낸다.
[myFooOne release]; //retainCount = 1 [myFooTwo release]; //retainCount = 0 |
이때 메모리 공간의 참조 횟수 값은 0이 되며, 아이폰은 myFooOne과 myFooTwo 객체가 함께 사용하던 메모리 공간을 회수한다.
출처 : iOS 앱 개발 시작을 위한 단계별 40개 예제 Objective-C 프로그래밍 (Mc Graw Hill 길벗 출판)
'컴퓨터 > 코딩 - 아이폰' 카테고리의 다른 글
[iOS] APNs에서 device token을 못 받아올 때 (0) | 2012.04.23 |
---|---|
[iOS] 모달 뷰(Modal View) 띄우기 & 전환효과 (0) | 2012.04.06 |
[아이폰] 간단한 설정값, 데이터 저장 (0) | 2012.03.28 |
xcode 텍스트필드(TextField) 비밀번호 형식으로 보이기 (0) | 2012.03.26 |
C언어/Objective-C 기초 익히기 좋은 사이트 (0) | 2012.02.23 |
RECENT COMMENT