2011-09-13 4 views
1

임시 사용 목적으로 XIB를 하위보기로 추가합니다. 그것은 전체 화면이며 아래 코드가 비효율적이라고 생각합니다. 나는 내가 여기서 잘못된 것을하고 있음을 알고있다. 내 하위 뷰가 콘솔에서 이상한 충돌 및 경고 메시지를 받고 있습니다. 내가 전에 다르게 그것을 테스트했기 때문에 하위보기에서 코드에 아무 문제가 없다는 것을 알고있다.더 효율적인 방법이 있습니까?

여기 뭔가 잘못 되었나요?

self.sp = [[Score alloc] initWithNibName:@"Score" bundle:nil]; 
    [self.view addSubview:self.sp.view]; 
    [self.sp.view setFrame:CGRectMake(0, 485, 320, 480)]; 
    [self.sp.view setBackgroundColor:[UIColor clearColor]]; 
    [UIView animateWithDuration:1 
          delay:0 
         options:UIViewAnimationOptionCurveLinear 
        animations:^{ 
         [self.sp.view setCenter:self.view.center]; 
        } 
        completion:nil]; 

내 경우에는 'sp'를 해제하는 것과 관련이 있다고 생각합니다. 어떻게 제대로 풀어 주겠습니까? 뷰 컨트롤러에서 뷰를 닫고이 뷰에서 뷰를 닫습니다.

감사합니다.

답변

1

가장 확실하게 Score 개체가 누출됩니다.

개체가 allocinit 인 경우 보유 개수가 1 인 개체를 반환하며 결코 release 개가 아닙니다. 또한 sp 속성이 retain 속성 인 경우 보유 개수를 1 씩 늘리고 다시 release 호출과 균형을 유지해야합니다.

self.sp = [[[Score alloc] initWithNibName:@"Score" bundle:nil] autorelease]; 

을하고 dealloc 방법은 sp을 보내고도 release 있는지 확인 :

retain 속성이 sp입니다 가정하면, 다음과 같은 시도하십시오.

+0

정보 및 답변 주셔서 감사합니다. 마지막으로, 화면에서 뷰를 닫을 때 Score의 뷰 컨트롤러는 무엇입니까? 자동으로 출시 되나요? 아니면 특별한 것을해야합니까? –

+0

수동으로 표시하기 때문에이 경우 수동으로 해제해야합니다. – pgb

+0

수동으로 해제한다는 것은 무엇을 의미합니까? Score보기에서 내가 수행하는 것은 [self.view removeFromSuperView]입니다. 그러나 나는 실제로 그것을 공개하지 않는다는 것을 안다. 그래서 나는이 경우 어떻게해야 하는가? –

관련 문제