Objective-C (ARC / MRC)

이한솔·2024년 8월 2일

Objective-C 문법 🍎

목록 보기
12/12

ARC & MRC

Objective-C에서 메모리 관리는 MRC, ARC 두 방식으로 이루어진다.



MRC (Manual Reference Counting)

개발자가 메모리 관리의 모든 측면을 직접 제어하는 방식으로 객체를 생성하고 사용할 때 retainrelease 메서드를 호출하여 객체의 참조 카운트를 수동으로 조절해야 한다.

retain: 객체의 참조 카운트 증가, 객체가 더 이상 사용되지 않으면 참조 카운트를 감소시켜야 한다.
release: 객체의 참조 카운트를 감소, 참조 카운트가 0이 되면 객체가 해제된다.
autorelease: 객체의 해제를 지연시키고, 후에 자동으로 해제되도록 예약한다.
assign:기본 데이터 타입이나 객체가 아닌 데이터에 사용, 메모리 관리를 하지 않아서 객체에 사용 시 객체가 해제되면 참조가 유효하지 않아 앱이 크래시될 수 있다.

// 객체 생성
MyObject *obj = [[MyObject alloc] init];

// 참조 카운트 증가
[obj retain];

// 객체 사용

// 참조 카운트 감소
[obj release];

// 자동 해제를 예약
[obj autorelease];


ARC (Automatic Reference Counting)

컴파일러가 자동으로 메모리 관리를 처리하는 방식이다. 개발자는 메모리 관리의 세부 사항을 직접 신경 쓸 필요가 없고 참조 카운트 조절이 자동으로 이루어진다. 순환 참조를 방지하기 위해서 weak 참조를 사용하여 객체가 서로를 참조하여 메모리에서 해제되지 않는 문제를 해결한다. 메모리 관리 코드가 자동으로 처리되므로, 코드가 더 간결하고 읽기 쉬워진다.

strong: 객체에 대한 강한 참조를 유지, 객체가 메모리에서 해제되지 않도록 보장한다.
weak: 객체에 대한 약한 참조를 유지, 객체가 메모리에서 해제되면 참조가 자동으로 nil로 설정된다.
assign:기본 데이터 타입이나 객체가 아닌 데이터에 사용, 메모리 관리를 하지 않아서 객체에 사용 시 객체가 해제되면 참조가 유효하지 않아 앱이 크래시될 수 있다.
copy: 객체의 복사본 저장, 문자열, 배열과 같은 변할 수 있는 객체에 사용되며, 원본 객체의 변경이 프로퍼티에 영향을 미치지 않도록 보장한다.

// 객체 생성
MyObject *obj = [[MyObject alloc] init];

// ARC에서 메모리 관리가 자동으로 수행됩니다.
// 따로 retain, release, autorelease 호출이 필요 없습니다.

0개의 댓글