위키 피 디아는 "컴퓨터 프로그래밍에서 약한 참조는 참조 된 개체를 가비지 수집기에서 수집하지 못하도록 보호하는 참조입니다." 이 두 가지 유형의 참조가 코드에서 어떻게 보이나요? 약한 참조는 자동으로 재생 된 메시지에 의해 만들어진 참조입니까?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
- 1. HTTPS 요청은 어떻게 생겼습니까?
- 2. CGContextRef의 좌표계는 어떻게 생겼습니까?
- 3. 조각난 메모리는 어떻게 생겼습니까?
- 4. 지문 데이터는 어떻게 생겼습니까?
- 5. std :: valarray의 미래는 어떻게 생겼습니까?
- 6. 내 안드로이드 레이아웃은 어떻게 생겼습니까?
- 7. 네임 스페이스의 이름은 어떻게 생겼습니까?
- 8. 특별 출시 프로세스는 어떻게 생겼습니까?
- 9. 좋은 현대 코드는 어떻게 생겼습니까?
- 10. 웹 개발 툴킷은 어떻게 생겼습니까?
- 11. 빈 GQL 결과는 어떻게 생겼습니까?
- 12. ObjectiveC에서 ECMAscript
- 13. PHP - GPS 위치 정규식은 어떻게 생겼습니까?
- 14. C에서 struct의 컴파일 된 정의는 어떻게 생겼습니까?
- 15. std :: map 확장 초기화 목록은 어떻게 생겼습니까?
- 16. 내 관리자/소식 수정 URL은 어떻게 생겼습니까?
- 17. JSON으로 인코딩 된 요청은 어떻게 생겼습니까?
- 18. ObjectiveC에서 .doc (MSWord) 파일 읽기?
- 19. ObjectiveC에서 다른 클래스의 클래스 변수를 어떻게 간단히 변경할 수 있습니까?
- 20. 강력한 형식의 DataContext는 어떻게 작동합니까?
- 21. 핵심 데이터의 사용자 지정 액세서 메서드 구현은 어떻게 생겼습니까?
- 22. 흐림 가우스 알고리즘은 어떻게 생겼습니까? 구현 사례가 있습니까?
- 23. 클로저 내에 잠글 수 있습니까()? Lambdas와 코드 출력은 어떻게 생겼습니까?
- 24. iTunes Visualization - 어떤 유형의 코드를 작성했으며 그 코드는 어떻게 생겼습니까?
- 25. ObjectiveC에서 수퍼 클래스의 메서드를 호출하는 타이밍이 중요합니까?
- 26. ObjectiveC에서 iOS 대 % d의 다른 처리
- 27. 강력한 형식의 BeginForm은 어떻게 만듭니 까?
- 28. Weakreference에서 강력한 참조 만들기
- 29. 파이썬 목록에서 참조가 아닌 값만 어떻게 복사합니까?
- 30. php/mongodb : php에서 참조가 어떻게 작동합니까?
저는 주로 iOS SDK에 관심이 있습니다. iOS 4와 관련하여 모든 "할당 유형"속성을 수행하고 명시 적 유지 메시지가없는 다른 obj 포인터에 대한 다른 단순 할당은 약한 참조로 간주되어야합니까? – Centurion
예. 그러나 "alloc"과 같은 메소드는 암시 적 "retain"을 포함합니다. – Thilo
@Thillo 속성을 사용하는 경우'weak'는'assign'과 동일합니까? –