assign VS weak

kirri1124·2021년 12월 27일
0

iOS Review

목록 보기
5/15

assign

객체의 retain count를 증가시키지 않는다. 외부에서 retain count를 감소시켜 객체가 소멸될 수 있기 때문에 int와 같은 primitive type에 적합하다.

weak

assign와 거의 동일하지만 assign은 객체가 소멸되어도 포인터 값이 변하지 않는다. weak는 객체가 해제되는 시점에 포인터 값이 nil이 된다.
assign의 문제점은 객체가 해제되어도 포인터 값이 남아 있어서 접근하려다가 죽는 경우가 생긴다는 점이다.

QnA

weak는 언제 dealloc될까요?
마지막 강한 참조가 더 이상 객체를 가리키지 않으면 객체는 할당이 해제되고 모든 약한 참조는 dealloc 된다.

Retain Count가 뭐야

ARC가 없던 시절에는 개발자가 메모리 관리를 해주어야 했다.
따라서 메모리를 관리하는 방법에 Retain과 Release라는 키워드를 사용했다고 한다.
애플에서는 이 방식을 MRC(Manual Retain Counting) 라고 말한다.
Retain은 객체의 레퍼런스 카운트를 증가시킨다. 그리고 카운트 되어있으면 메모리에서 해제되지 않는다.

Release는 객체의 레퍼런스 카운트를 감소시킨다. 객체를 더 이상 사용하지 않거나 메모리에서 해제하고 싶을 때 이 함수를 호출해서 레퍼런스 카운트를 감소시킬 수 있다.

0개의 댓글