2011-09-07 5 views
0

UIView를 툴바로 서브 클래 싱하고 모든 종류의 버튼과 다른 뷰를 클래스에 추가했습니다.iOS 앱을 호출하는 호출 메소드가 충돌합니다.

@interface GridViewController : UIViewController <UIWebViewDelegate, UIScrollViewDelegate> { 
    Toolbar *toolbar; 
} 

@property (retain) Toolbar *toolbar; 

및 구현에 나는이있다 : : 이제 내의 ViewController 헤더에 내가 이것을 가지고 내가 분석 실행하면, 지금

@synthesize toolbar; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    CGRect toolbarRect = CGRectMake(0, 0, 1024, 40); 
    self.toolbar = [[Toolbar alloc] initWithFrame:toolbarRect]; 
    [self.view addSubview:toolbar]; 
} 

- (void) dealloc { 
    [toolbar release]; 
    [super dealloc]; 
} 

를, 그것은 기본적으로 내가 메모리 누수의 가능성을 가지고 있다고 말한다. [툴바 릴리스]를 추가하면; addSubView : toolbar를 호출 한 직후, ViewController를 팝업 할 때 일반적으로 하위 뷰를 추가 할 때 앱이 충돌합니다.

내가 뭘 잘못하고 있니? 나는 메모리 관리에 관한 모든 것을 읽으려고 노력했다. 그리고 그에 따라 당신은 항상 allocate/copy/retain 등등을 놓아서/autorelease해야만한다. 만약 내가 나의 코드를 보면 헤더의 인스턴스 변수를 유지할 것이다. 그것을 구현에 할당하므로 보유 개수가 +2가되어야하므로 두 번 릴리스해야하지만, 오해가있는 것 같습니다. 어떤 도움이라도 대단히 감사합니다. 내가 사고를 말할 때

,이 얻을 : 엑스 코드의 일시 정지 및 EXC_BAD_ACCESS가 main.m에서이 라인

int retVal = UIApplicationMain(argc, argv, nil, nil); 

는 콘솔에 나는이 얻을 수 있다고 말한다 :

modifying layer that is being finalized - 0x60895f0 
+0

나에게 참조 횟수는 +3이어야합니다. 하나는 alloc, 다른 하나는 self.property에 저장하고 다른 하나는 addSubview에 보유합니다. 당신은 addSubview 직후에 릴리스 진술을 추가 할 때 팝 중에 충돌했다, 당신은이 오류의 스택 추적을 게시 할 수 있습니까? – Saran

+0

질문에 충돌 정보가 추가되었습니다. – margusholland

+0

좀비가있는 인스 트루먼 트에서 앱을 실행하는 것은 어떻습니까? 그러면 이미 액세스 한 객체를 식별하는 데 도움이됩니다. – Saran

답변

0

실제로 문제는 Toolbar 클래스에 있고 ViewController에는없는 것 같습니다. 나는 ivars에 setter를 사용하지 않아서 파손되기 시작했다.

0

속성이 경우, self.toolbar(retain)으로 설정하면 self.toolbar = [[Toolbar alloc] initWithFrame: toolbarRect]; 행 이후 보유 수는 +2가되어야 함을 나타냅니다. 그 숫자를 self.toolbar = [[[Toolbar alloc] initWithFrame: toolbarRect] autorelease]으로 바꾸고 보유 수를 1로 유지하는 것이 좋습니다. addSubview에서 오는 보존이 dealloctoolbar에서 해제되어 있기 때문에 문제가 해결 될 것입니다.

고정 설정자가있는 모든 속성에는 자동 렌더링 된 개체가 있어야합니다.

+0

아니, 그 전에 같은 결과로 끝납니다 - 애플 리케이션은 popViewController에 충돌 – margusholland

관련 문제