[Objective-C Tip] 메모리 관리

Objective-c 의 메모리 관리에 대해서 알아보겠습니다.

-alloc : 해당 객체에 메모리를 할당하고 레퍼런스 카운트를 1 올립니다.
-retain : 해당 객체의 레퍼런스 카운트를 1 올립니다.
-copy : 해당 객체의 복사본을 만듭니다. 그리고 복사본의 레퍼런스 카운트를 1 올립니다.
-release : 해당 객체의 레퍼런스 카운트를 1 낮춥니다.
-autorelease : 정해지지 않은 시점에 해당 객체의 레퍼런스 카운트가 -1 낮아집니다.

* 규칙

1. 블록 내에서 alloc, retain, copy의 수와 release, autorelease 수가 동일해야 합니다.
2. factory 함수를 사용해 생성한 객체의 경우는 대부분 autorelease로 반환됩니다. 따로 release를 할 필요가 없습니다.
3. 클래스의 인스턴스 변수들은 dealloc 메소드에서 다 release해야 합니다.

______________________________________________________________

인스턴스 메소드에서 인스턴스 변수에 새로운 값을 assign하는 방식에는 두가지가 있습니다.
인스턴스 변수명이 someObject 라고 할때
-(void) testRetainCount
{
someObject = xxx;       //첫번째방식
self.someObject = xxx;  //두번째방식
}
두번째 방식은 변수를 property화 하고 synthesize 했을 때만 사용 가능합니다.

두 방식 모두 assign하는 대상 주소는 같지만 retainCount의 차이가 발생하므로 주의를 요합니다.
someObject = xxx;  //잘못된 메모리 참조로 앱이 크래시 될 수 있습니다.
self.someObject = [xxx retain]; //메모리 릭이 발생합니다.
다음은 올바른 방법입니다.
someObject = [xxx retain];
self.someObject = xxx;


댓글

주간 인기글

카드뉴스 마케팅 팁

[ubuntu] 신규 계정에 sudo 권한 추가하기

HTML 템플릿을 인쇄용으로 가공하기

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Spring Boot] JPA + Pageable 을 이용한 페이징 처리