메모리 경고가 발생하면 NSMutableArray에 저장된 많은 개체를 릴리스합니다.NSArray를 해제 할 때 개체를 nil로 설정합니다.
[_children release];
는 또한 (A MEM 경고가 일어난 잠재적 후) 어떤 점에서 객체를 통해 재귀 필요, 그래서 나는 '외설하는 nil-하는 내가 비교를 할 수있는 객체 주위에 아직도 있는지 확인해야 배열을 해제해도 아무 것도 없기 때문에 작동하지 않습니다.
반복 도중 배열을 수정할 수 없기 때문에 배열을 루프 처리 할 수 없습니다. 객체를 1 개씩 제거하고 nil로 설정하면 루프를 수행 할 수 없습니다.
분명히 뭔가 빠져있는 것처럼 느껴집니다. 배열에서 일부 값을 + nil로 해제하려고합니다.
설명해 주셔서 감사합니다. 나는 잘못된 트랙에 있었고 해결 방법을 발견했다. 나는 C++ 배경에서 왔으므로 이것은 즉시 명백하지 않습니다. 귀하의 예제에서 나는 b == nil로 가정했을 것입니다. – Sam
당신이 정말로 무엇을하는지 모르겠으므로 더 나은 해결책을 제안 할 수 없습니다. 배열의 객체가 자신의 클래스 인 경우 dealloc 메소드 (보유 카운트가 0에 도달하면 호출 됨)를 오버라이드 할 수 있으며 현재 다른 객체 (예 : 대리자 또는 알림 만 브로드 캐스팅) 다른 객체는 자신에 대한 참조를 무효로 업데이트 할 수 있습니다. – Mecki
C++의 경우에도 객체에 대한 포인터가 있다면 객체 자체가 파괴되었을 때 보유하고있는 주소는 지워지지 않을 것입니다. 포인터가 유효하지 않을 것입니다. 당신은 여전히 할당 된 메모리가 사용 된 곳을 가리키는 참조를 가지고 있습니다 ... –