2012-07-24 2 views
0

나는 내 아이폰 프로젝트를 완성하기 위해 가고 있기 때문에 도움을 청하기 위해 여기에 왔고 완벽하기를 바란다!UIViewcontroller never deallocated

나는 할당해제 UIViewcontroller 몇 가지 문제가 있습니다.

는 설명해 드리죠 :

내가 정의 세포와 UITableview 있습니다. 각 사용자 정의 셀에서 새를 할당 할 버튼 UIViewController : ListOfAGuestFriendViewController;

그래서 "플립 트랜지션"을 만들고 새 ListOfAGuestFriendViewController보기를 표시하는 메서드를 호출하는 대리자를 만들었습니다.

내 문제는, 내가 을 해제 ListOfAGuestFriendViewController 얻을 결코 내 addSubiewALL과 같은 문제가 오긴했는데, 아니면 그냥 보기 부하를 할당 해제됩니다!

누군가가 정확하게 내가 어떻게 을 만들 수 있는지 정확하게 설명 할 수 있습니까? addSubview? 여기

내 코드입니다 :

내가보기를 뒤집어 경우 :

-(void)flipAView 
{ 
    Guest *currentSelectedGuest = [self createAGuestUsingIndexPath:self.selectedIndex]; 

    ListOfAGuestFriendViewController *listOfAGuestFriendViewController = [[ListOfAGuestFriendViewController alloc]init]; 

    [listOfAGuestFriendViewController setCurrentGuestSelected:currentSelectedGuest]; 
    [listOfAGuestFriendViewController setMyListOfContactControllerDelegate:self]; 

    [UIView animateWithDuration:0.25 animations:^{ 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
          forView:self.tableviewContainerView cache:YES]; 
     [self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view]; 
    }completion:^(BOOL finished){ 
     [listOfAGuestFriendViewController release]; 
     [self collapseCurrentExpandedCell]; 
    }]; 
} 

내가 다시 가고 싶어 : 나는 제거하면

-(IBAction)goBackButtonGotPressed:(id)sender{ 
    [UIView animateWithDuration:0.5 animations:^{ 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft 
          forView:[self.view superview] cache:YES]; 
     [self.view removeFromSuperview]; 
    }]; 
} 

그 코드 줄 :

[listOfAGuestFriendViewController release]; 

listOfAGuestFriendViewController 결코 할당 취소.

나는이 인스턴스에 대한 속성을 사용하지 않지만, 할 때 나는 동일합니다!

+0

분명히 귀하의 앱은 ARC 기반이 아닙니다. 왜 그것을 ARC로 변환하지 않습니까? 이러한 메모리 관리 문제가 모두 사라지는 것은 아닙니다. 어떤 속성이나 ivar을 해제하거나 dealloc 할 때, 그냥 nil로 설정하면됩니다. –

+0

나는 지금 ARC를 좋아하지 않는다. 그리고 ARC에서 나의 모든 프로젝트를 변환하는 것은 너무 많은 시간이 걸릴 것이다 ... 나는 다른 프로젝트를 가지고있다 : ( – Pwyll28

+0

나는이 라인을 추가 할 때 당신의 질문을 생각한다 [ listOfAGuestFriendViewController release]; dealloc가 작동하고이 줄이 [listOfAGuestFriendViewController release] 인 경우 이 제거 된 경우 dealloc은 작동하지 않습니까? –

답변

0

dealloc 기능을 확인 했습니까? // ViewController는 자동으로 자동 완성 기능을 제공합니다. 객체를 생성 할 때이 작업을 수행 할 때

ListOfAGuestFriendViewController *listOfAGuestFriendViewController = [[ListOfAGuestFriendViewController alloc]init]; 

이 유지 카운트가 1

될 것입니다 :

- (void)dealloc 
{ 
    [yourThings release], yourThings = nil; 
    [super dealloc]; 
} 
+0

예, 확인했습니다! 내 dealloc 함수에 중단 점을 넣었습니다! 해당 코드 줄을 제거한 경우 : [listOfAGuestFriendViewController release]; dealloc 메서드는 결코 호출되지 않지만, 그렇지 않으면 dealloc 메서드가 viewDidLoad 바로 뒤에 호출됩니다. – Pwyll28

1

나 코드로 설명하게 [self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view]; 수신기보기 뷰를 유지합니다 . 그러면 보유 할 수는 2가됩니다.

다음 : [self.뷰 removeFromSuperview]; 는 카운트가 모든 개체가이 retaincount 그것은 하나의 위의 경우 0 된다 유일의 후 해제됩니다 1.

될 것입니다 유지, 그래서 그것은의 dealloc 메소드를 호출하지 않습니다.

이 라인을 작성하는 경우

: [listOfAGuestFriendViewController release];을 의미한다이 [self.tableviewContainerView addSubview:listOfAGuestFriendViewController.view]; 후에는 2 대 1로 감소한다 카운트를 유지, 그래서 당신이 호출 할 때 [self.view removeFromSuperview];보기가 해제됩니다. addSubview에 대한 참조 에 대한 참조 Memory Management

+0

그게 내가 생각한 것입니다! 하지만 그 이유는 모르겠지만! listOfAGuestFriendViewController의 dealloc 메소드는 뷰가로드 된 직후에 호출됩니다! – Pwyll28

+0

코드에서'[listOfAGuestFriendViewController release];를 제거하면 객체의 ** retain count **가 1이되고 retaincount가 0이 될 때까지 dealloc이 호출되지 않습니다. –

+0

얻었습니까? 문제 ? –