런타임에 때때로 손상 될 수있는 객체를 처리하는 함수에서 내 객체가 손상되었는지 여부를 어떻게 든 결정할 수 있습니까?출시 된 개체에 대한 포인터가 있는지 확인하는 방법은 무엇입니까?
답변
짧은 대답, 아니요, 개체가 할당 취소되었는지 알 수있는 방법이 없습니다. 자세한 내용은 this question을 확인하십시오.
실제로 이것을 수행하는 유일한 방법은 __weak
포인터라고하는 ARC (및 iOS 5, 이전에는 작동하지 않음)를 사용하는 것입니다.
__weak
변수는 정의 상 보존되지 않습니다. __weak
변수가 대상을 유지하면 정의에 따라 자체를 해제 할 수 없습니다.
기본적으로 __weak
포인터는 할당 해제 될 때 NULL
으로 자동 설정되는 변수입니다. 따라서, 당신은 객체가 해제되어 있는지 확인하기 위해이 같은 작업을 수행 할 수 있습니다이 쓸모없는 것으로 _weakRef
원인으로
__strong id object; // required so that the object doesn't get deallocated right away
__weak id _weakRef;
object = [NSObject new];
_weakRef = object;
// do stuff with 'object'
if (_weakRef)
{
// 'object' hasn't been deallocated yet, do something with it.
}
말하기, 당신은, 그러나, 객체에 강하고 약한 참조에 보유하지 않습니다 (object
을 nil
으로 설정할 때 확인하십시오).
특히 프레임 워크를 만드는 경우에는 __weak
변수에만 기반한 디자인 패턴에주의해야합니다. iOS 5를 타겟 배포로 사용하는 것과 같이 '성가신 일'이라고 말하는 것은 없습니다.
이 게시물은 당신이 어떻게 작동하는지 약한 참조의 깊은 이해를 도왔 희망하고, 그렇지 않은 경우, 당신은 여기에 읽을 수있는 훌륭한 위키 피 디아 기사가 : 그 개체를 가정
+1이이 질문의 여러 중복에 대한 유일한 정답입니다. – OrangeDog
는 NSObject
입니다 인스 트루먼 트에서 좀비 만 활성화하면됩니다. 그럼 당신이해야 할 일은 문제의 대상을 메시지로 보내는 것뿐입니다. 메시지를 보낼 때 대상이 죽었는지 알려줍니다.
- 1. 개체에 값이 있는지 확인하는 방법은 무엇입니까?
- 2. NSManagedObject에 대한 참조가 있는지 확인하는 방법은 무엇입니까?
- 3. 개체에 하나 이상의 자식이 있는지 확인하는 데이터베이스 효율적인 방법은 무엇입니까?
- 4. 개체에 특정 메서드/속성이 있는지 확인하는 방법은 무엇입니까?
- 5. 포인터가 매달려 있는지 확인하는 방법이 있습니까?
- 6. EventMachine :: Connection이 열려 있는지 확인하는 방법은 무엇입니까?
- 7. 포인터가 삭제 된시기를 확인하는 방법은 무엇입니까?
- 8. 배열 개체에 내 키가 있는지 확인하는 방법
- 9. 개체에 속성이 있는지 확인하는 자바 스크립트 오류
- 10. 프린터가 있는지 확인하는 방법은 무엇입니까?
- 11. 어레이가 있는지 확인하는 방법은 무엇입니까?
- 12. 현지화가 있는지 확인하는 방법은 무엇입니까?
- 13. 개체가 있는지 확인하는 방법은 무엇입니까?
- 14. 시트가 있는지 확인하는 방법은 무엇입니까?
- 15. 개체에 대한 참조를 추적하는 방법은 무엇입니까?
- 16. CoffeeScript를 사용하여 개체에 키가 있는지 확인하는 가장 간단한 방법
- 17. NSURL에 NSString이 있는지 확인하는 방법은 무엇입니까?
- 18. 포인터가 유효한지 확인하는 방법?
- 19. 출시 된 Vb.net 프로그램에 대한 관리 액세스?
- 20. Google지도 뷰포트에 마커가 있는지 확인하는 방법은 무엇입니까?
- 21. 파이썬에서 양지들이 비어 있는지 확인하는 방법은 무엇입니까?
- 22. 사용자가 아직 있는지 확인하는 방법은 무엇입니까?
- 23. corba :: WString이 비어 있는지 확인하는 방법은 무엇입니까?
- 24. JTextArea가 활성화되어 있는지 확인하는 방법은 무엇입니까?
- 25. 알림이 이미 있는지 확인하는 방법은 무엇입니까?
- 26. 변수에 값이 있는지 확인하는 방법은 무엇입니까?
- 27. 개체가 ObjectContext에 첨부되어 있는지 확인하는 방법은 무엇입니까?
- 28. 양식이 도킹되어 있는지 확인하는 방법은 무엇입니까?
- 29. 스레드가 이벤트를 기다리고 있는지 확인하는 방법은 무엇입니까?
- 30. 보기에 대한 참조가 안드로이드의 다른보기 안에 있는지 확인하는 방법은 무엇입니까?
ARC와 새로운'__weak' 변수를 고려하지 않았으므로 -1입니다. –