위키 피 디아는 "컴퓨터 프로그래밍에서 약한 참조는 참조 된 개체를 가비지 수집기에서 수집하지 못하도록 보호하는 참조입니다." 이 두 가지 유형의 참조가 코드에서 어떻게 보이나요? 약한 참조는 자동으로 재생 된 메시지에 의해 만들어진 참조입니까?objective-c에서 약하고 강력한 참조가 어떻게 생겼습니까?
답변
다음 답변은 가비지 수집이없는 경우 (예 : iOS)입니다. 가비지 수집의 경우 실제로 약한 참조를 생성하는 키워드 (__weak
)가 있습니다.
"weak"참조는 보유하지 않은 참조입니다.
주기를 분해하려면이 약한 참조를 사용해야합니다. 일반적인 경우는 상위 객체에 대한 참조가 필요한 하위 객체입니다. 이 시나리오에서 부모는 자식 개체에 대한 참조를 유지하고 자식 개체는 부모에 대한 참조를 가지지 만이를 유지하지는 않습니다. 자식 개체는 부모 개체가있는 동안 만 존재해야하기 때문에이 방법이 효과적입니다.
정말 그는 "매우 약한 참조";-) 호출 스택이 풀어진 인 경우약한 참조는 자동으로 재생 된 메시지에 의한 참조입니까?
자동 해제 물건 (예 : 모든 이벤트 루프의 끝에서) 멀리가는 것 없습니다. 덜 일시적인 것이 필요한 경우 참조를 유지해야합니다 (위의 경우와 같이 다른 일부가 충분히 유지해야 함).
약한 참조는 강한 참조가 개체를 강제로 메모리에 남아있는 동안 개체가 메모리에 남아 있도록 강제적이지 않은 참조입니다.
변수에 약한 참조를 작성한 경우 해당 변수에 대해 nil을 얻을 수 있습니다.
UITableViewDelegate
, UIScrollViewDelegate
등은 약한 참조의 예이다. 강한 참조
예 : 다음 obj1
도 제거 얻을 메모리에서 obj2
를 제거하면 obj1
에
MyClass *obj1 = [[Myclass alloc] init];
Myclass *obj2 = obj1;
여기 obj2
이 가지고 강한 참조는 것을 의미한다.
obj2에는 obj1에 대한 강력한 참조가 실제로 있습니까? "약한 참조는 개체가 메모리에 남아 있도록 강제적이지 않은 참조입니다."라는 예를보고 obj1에 릴리스 메시지를 보내면 obj1이 메모리에 유지되지 않습니다. " Myclass * obj2 = obj1; " 할당은 obj1의 보유 수를 증가시키지 않습니다. IMHO 약한 참조입니다. – Centurion
나에게 강한 참고 사항을 설명해 주시겠습니까 ?? – Hitesh
제 생각에는 "[obj2 유지];" 그것을 강력한 참고 자료로 만들 것입니다. 예, obj2는 obj1에 대한 포인터이고 두 개의 유지 카운트는 메모리에 할당 된 동일한 객체에 속하며 IMHO는 어딘가에 한 곳에 저장됩니다.그러나 모든 +1 보유 수에는 소유자 (적어도 이론상)가 있으며 나에게 해당 소유자에 대해 명시 적 (보유) 또는 암시 적 (할당) 보존 메시지를 대상에 보내는 데 사용 된 var/ivar/속성으로 생각하는 것이 좋습니다. 목적. – Centurion
저는 주로 iOS SDK에 관심이 있습니다. iOS 4와 관련하여 모든 "할당 유형"속성을 수행하고 명시 적 유지 메시지가없는 다른 obj 포인터에 대한 다른 단순 할당은 약한 참조로 간주되어야합니까? – Centurion
예. 그러나 "alloc"과 같은 메소드는 암시 적 "retain"을 포함합니다. – Thilo
@Thillo 속성을 사용하는 경우'weak'는'assign'과 동일합니까? –