예 :보기 컨트롤러가있어서 없애 버립니다. 그러나 여전히 메모리 주소를 가지고있는 변수가 있습니다. 액세스하면 EXEC_BAD_ACCESS가됩니다. 당연하지. 그러나 : 변수가 유효한지 확인할 수있는 방법이 있습니까? 즉, 여전히 메모리에있는 내용을 가리키는 경우?인스턴스가 여전히 메모리에 있는지 확인하는 방법은 무엇입니까?
답변
를 수행
Cocoa Memory Management Guidelines
간단히 말해서, 당신이 뭔가를 주변에 붙들고 싶다면 은retain
이되어야합니다.
은 당신이 뭔가 멀리 가고 싶은 경우에 당신이 이전에 그것을를 유지 한 당신 release
또는 autorelease
그것을해야합니다.
당신 해야 결코 (당신의 dealloc
방법 중 하나가 끝날 때마다 [super dealloc];
제외) 직접 전화 dealloc
.
당신 해야 결코release
또는 autorelease
당신이하지 retain
않았다 객체.
일부 방법은 을 수행합니다.은 보유해야하는 객체를 반환합니다. release
이어야합니다. alloc
클래스의 인스턴스 인 경우 retain
을 의미합니다. copy
및 인스턴스 인 경우 복사본이 유지됩니다.
retainCount
방법을 사용하려는 경우에는 사용하지 마십시오. 유용하지 않습니다. 카운트를 델타로 유지하는 것만 고려하십시오. 추가하면 빼기를해야하지만 절대 값은 무시해야하는 구현 세부 사항입니다.
(즉, 결정적으로 객체의 유효성을 확인하는 방법이있다하더라도 -이 없습니다 -. 그것은 잘못된 해답이 될 것이다)
아, 그리고 빌드를 사용하여 분석을 Xcode의 기능. 그것은 다른 것들 사이에서 메모리 관리 문제를 식별하는 아주 좋은 - 그러나 완벽하지는 않은 - 일을합니다.
+1 아멘, 목사. 이것이 메모리 관리의 복음입니다. –
, 당신은 당신의 객체에 대한 포인터가 여전히 다음 유효한 메모리를 참조하는지 여부 의미 :
MyClass에 * 인 myVariable = [[MyClass에 ALLOC]을 초기화] 물건의
// 톤은 ... 발생
경우 (인 myVariable = 0!) // 당신은 다시 읽을 필요 더 많은 물건"NSZombieEnabled"중단 점을 사용하십시오.
이러한 이유로 모든 접근자를 사용하는 것이 좋습니다.개체가 어느 곳에서나 릴리스되면 nil에 할당되며 Nil 개체에서 API 또는 메서드를 호출하면 아무런 해가 없습니다. 그러므로 액세서리를 사용하는 습관을 가지십시오.
이 NSZombieEnabled 플래그를 빌드 설정에서 응용 프로그램의 인수로 추가하기 만하면됩니다. 그것을 가능하게하십시오. 이제 응용 프로그램을 디버그 모드로 실행합니다. 그런 충돌이 발생하면,이 중단 점은 어느 객체가 해제되었는지 그리고 어디에서 충돌하고 있는지를 보여줍니다. 당신이 이유를 디버깅 순수하게 요구하는 경우
건배, Manjunath
- 1. 변수에 내 클래스의 인스턴스가 있는지 확인하는 방법은 무엇입니까?
- 2. 컬렉션에 특정 유형의 인스턴스가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 3. 명명 된 인스턴스가 StructureMap 2.6의 컨테이너에 있는지 확인하는 방법은 무엇입니까?
- 4. 어레이가 있는지 확인하는 방법은 무엇입니까?
- 5. BitmapImage 인스턴스가 초기화되었는지 확인하는 방법은 무엇입니까? WPF
- 6. 현지화가 있는지 확인하는 방법은 무엇입니까?
- 7. 개체가 있는지 확인하는 방법은 무엇입니까?
- 8. GPS 센서가 있는지 확인하는 방법은 무엇입니까?
- 9. 두 노드가 연결되어 있는지 확인하는 방법은 무엇입니까?
- 10. 클러스터 된 환경에서 클래스의 단일 인스턴스가 있는지 확인하는 방법
- 11. UI 스레드에 있는지 확인하는 방법은 무엇입니까?
- 12. 컴퓨터가 인터넷에 연결되어 있는지 확인하는 방법은 무엇입니까?
- 13. html 컨트롤이 있는지 확인하는 방법은 무엇입니까?
- 14. PC가 네트워크에 연결되어 있는지 확인하는 방법은 무엇입니까?
- 15. 내 WebService에 연결되어 있는지 확인하는 방법은 무엇입니까?
- 16. Adobe Air 폴더가 있는지 확인하는 방법은 무엇입니까?
- 17. SqlConnection에 연결된 SqlDataReader가 있는지 확인하는 방법은 무엇입니까?
- 18. sth alr이 스테이지에 있는지 확인하는 방법은 무엇입니까?
- 19. .NET DLL이 등록되어 있는지 확인하는 방법은 무엇입니까?
- 20. 속성이 요소 내에 있는지 확인하는 방법은 무엇입니까?
- 21. Perl에 디렉토리가 있는지 여부를 확인하는 방법은 무엇입니까?
- 22. 하위 창이 있는지 확인하는 방법은 무엇입니까?
- 23. jQuery에 클래스가 있는지 확인하는 방법은 무엇입니까?
- 24. matlab에서 행렬이 비어 있는지 확인하는 방법은 무엇입니까?
- 25. 네트워크가 연결되어 있는지 확인하는 방법은 무엇입니까?
- 26. ffmpeg에 오류가 있는지 확인하는 방법은 무엇입니까?
- 27. 속도 : 변수가 정의되어 있는지 확인하는 방법은 무엇입니까
- 28. 개체가 정의되어 있는지 확인하는 방법은 무엇입니까?
- 29. 이메일 주소가 있는지 확인하는 방법은 무엇입니까?
- 30. 필드에 포커스가 있는지 확인하는 방법은 무엇입니까?
, 즉 명확하게하시기 바랍니다. 앱에서 실제로 일어날 일을 요구하는 경우 다른 사람들이 말했듯이 이것은 잘못된 접근 방식입니다. – Ken