2012-08-31 2 views
0

내 응용 프로그램의 메모리 관리에 문제가 있습니다. NSView 클래스를 할당하고 내 Windows 중 하나에 넣어. 잠시 후 슈퍼 뷰에서 객체를 제거한 다음 다른 객체를 그 객체의 위치에 배치합니다. 내가 가지고있는 문제는 메모리를 제거 할 때 메모리가 해제되지 않는다는 것입니다. 이전에 보유한만큼의 메모리를 보유하고 있으며, 그 클래스를 더 추가하면 메모리에 계속 쌓입니다. 내 질문은, 그 개체를 제거하는 것입니다 클래스를 개최 모든 개체를 없애거나, 일부 포인터가 개최되는 경우에도 개체가 제거 된 후에? 필요한 경우 코드를 게시 할 수 있습니다.오브젝트를 SuperView에서 제거하지만 메모리가 여전히 할당 되었습니까? (ARC)

감사합니다.

편집

: 다음은 여기에 매 분마다 업데이트 내가 그것을

[[self.window.contentView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

할당을 해제하는 데 사용하는 코드 나 타이머에 그것을 만들 수는 있어요 내가

MyClass *theClass1 = [[MyClass alloc] initWithFrame:frameRect]; 
[self.window.contentView addSubview:theClass1]; 

를 할당하는 데 사용하는 코드입니다. 나는 다른 곳에서는 그것을 언급하지 않는다.

+0

하위 뷰를 신고, 생성, 추가 및 제거하는 코드를 공유 할 수 있습니까? 다른 곳에서 그것을 참조합니까? – sch

답변

1

각 개체의 메모리는 클래스의 각 인스턴스에 대해 개별적으로 처리되어야합니다. 하나의 인스턴스를 제거해도 다른 인스턴스의 할당에는 영향을 미치지 않습니다 (클래스의 다른 인스턴스를 찾는 맞춤 코드가없는 경우).

NSView 제거의 경우 removeFromSuperview은 수신자 (보기가 제거됨)를 해제합니다. 따라서 Apple 문서가 NSView에있는 이유는 나중에 나중에 필요하다면 retain이라고 말합니다.

선언되고, 인스턴스화되고, 추가되고, 제거 된 코드를 게시하면보다 구체적인 답변을 얻는 데 도움이됩니다.

+0

클래스의 해당 인스턴스에 속한 객체는 어떻습니까? 뷰를 제거하면 해당 뷰에 있던 객체가 여전히 메모리에 있습니까? –

+0

좋은 질문입니다. 정의에 따라 객체가 릴리즈 될 때 다른 객체를 유지하지 않는 한 해당 객체의 속성도 마찬가지입니다. –

관련 문제