2011-10-17 3 views
0

메모리 오버로드 (관리)와 관련된 문제를 매우 깨끗하게 해결하기 위해 고심하고 있습니다. 임 다른 뷰를 포함하는보기의 시리즈를 가진 내 프로젝트에 나는이 같은 상황이 : | _PageViewiOS 디자인 델리게이트와 부모 객체를 사용한 패턴 메모리 관리

|

MAINVIEW

_CustomButton

한혜진까지 한혜진, 좋은 쉽게 케이크. CustomButton에는 어떤 이유에서 대리자 (프로토콜)가 있으므로 PageView에서 N CustomButtons를 만드는 "주기를 위해", PageView에서 Self로 대리자를 설정하고 (CustomVuttonDelegate를 확장)

과 같은 단추를 놓습니다
{ 
CustomButton *customButton_ = [[CustomButton alloc] initWithFrame:CGRectMake(100.0,50+(i*55.0),200.0); 
customButton.delegate = self; 
[self addSubView:customButton_]; 
[customButton_ release]; 
} 

soo far soo again. 버튼을 누르십시오, PageView 프로토콜 메서드를 얻을, 몇 가지 코드를하고 voilà, 완료됩니다. 하나의 문제는 방법은 내가

[pageView_ removeFromSuperview]; 
[pageView release], pageView_ = nil; 

pageView_ = [PageView alloc] initWithFrame.....]; 

를 호출하고 I 표시 할 다른 데이터와 객체를 다시 있도록 한 점에서, MAINVIEW는 페이지 뷰를 제거해야한다는 것입니다. PageView가 결코 메모리에서 해제 및 제거되지 않는다는 것을 알아 챘습니다. 그 이유는 retainCount가 PageView 내에서 만든 CustomButton의 수와 물론 위임을 자체 플러스 중 하나에 할당했기 때문입니다. 내 질문은 모든 객체를 안전하게 제거하고 PageView도 제거 할 수있는 가장 깨끗한 방법은 무엇입니까 (메모리에 데이터를 표시하기 위해 많은 양의 데이터를로드하기 때문에).

지금은하고 있어요 :

내가 그것을 개체를 CustomButton 것으로, 페이지 뷰있는 NSMutableArray에서 만들고 이전 페이지 뷰를 제거하기 위해, I주기를하고 대리자 = 전무를 설정 한 다음 각을 해제 개체, NSMutableArray ("holder"라고 함)를 릴리스 한 후

그러나 문제는 다른 유형의 다른 객체를이 프로토콜에 추가하려는 경우이 배열에 추가하면 객체를 유지하는 다른 문제가 발생할 수 있다는 것입니다.

어디서 사람, 지식이 부족합니까? 더 공부해야합니다 (내가 말할 수 있음). 아니면 다른 OOD로 접근해야합니까?

고맙습니다.이 문제로 인해 과부하가 걸리고 내 머리가 가까이에 갇혀 있습니다. :)

+0

CustomButton 클래스의 대리자 속성을 어떻게 선언하고 구현합니까? – murat

답변

3

CustomButton 님의 대표자는 retain 속성이 CustomButton 인 것처럼 보입니다. 대리인은 assign 속성이어야하며 retain이나 copy이 아니어야합니다. here을 참조하십시오.