2012-01-27 2 views
0

Apple의 기본 메모리 관리 규칙을 통해 읽었습니다. 나는 "모든 객체가 하나 이상의 소유자를 가질 수 있습니다."라는 문장을 발견했습니다.2 명의 소유자가있는 객체

이것은 무엇을 의미합니까? 2 명의 소유자가있는 객체입니다. OOP 개념에 익숙하지 않습니다.

답변

3

메모리 관리에서 개체가 다른 개체에 대한 참조를 소유하고 있으면이를 유지합니다.

여러 개체가 개체를 보유 할 수 있으며 개체에 보존 기간이 없으면 아무도 소유하지 않고 사라집니다. retain은 참조 카운트를 증가시키고 release는 그것을 감소시킵니다.

좋은 유추는 애완 동물에게 가죽 끈을다는 것입니다. 여러 사람들이 가죽 끈을 달 수는 있지만 가죽 끈이없는 사람은 가죽을 벗을 수 있습니다. :)

참조를 받고있는 직접 함수 밖의 개체에 대한 참조를 사용하려는 경우 당신은 그것을 지켜야합니다. alloc, copy, mutableCopy를 호출하여 참조를 얻으면 방금 그것을 유지했다. 다른 메시지 이름을 사용하면 표준이 자동 응답 (괜찮습니다)되어 향후 해당 기능의 범위를 벗어나는 미래의 가까운 지점에서 사라집니다.

+0

나는 "가죽 끈"비유를 좋아합니다! – zaph

2

"소유"는 "참조를 보유하고 있음"을 의미합니다. iOS 메모리 관리는 명시 적이며 참조 카운팅에 의해 수행됩니다. 객체에 전송 된 "보유"메시지는 참조 횟수를 증가시키고 "해제"메시지는 참조 횟수를 감소시킵니다. 참조 카운트가 0에 도달하면 객체는 해제되고 (먼저 "dealloc"메시지가 전송됩니다). 이것은 NSObject 계층에있는 객체에 적용됩니다.

그래서 한 개체가 미래의 특정 시간에 계속 사용하려는 개체에 대한 참조를 건네면 해당 개체는 개체에 대한 포인터의 복사본을 보관하고 "유지"메시지를 보냅니다. "소유자"가 액세스하려고하는 동안 오브젝트가 해제되지 않습니다.

관련 문제