반응형
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;
'Programming > iOS' 카테고리의 다른 글
[Objective-C Tip] Key-Value Observing (0) | 2020.04.17 |
---|---|
[Objective-C Tip] UImage 이미지 리사이징 (0) | 2020.04.17 |
[Objective-C Tip] 디클레어 프로퍼티 (0) | 2020.04.17 |
[iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 3부 (필터) (1) | 2020.04.16 |
[iOS 개발팁] 빌드 환경 분리하기 (0) | 2020.04.16 |