2013-02-12 1 views
1

제 1 세대에서 테스트 할 때 정말 이상한 문제가 있습니다. iPad (iOS 5 실행)iOS 6에서는 출시되지만 iOS 5에서는 출시되지 않는 개체

나는 (보유와 함께) 속성으로 사용하는 UIView가 있습니다. 부모보기의 dealloc 메서드에서 속성을 nil합니다. 아주 기본적인 것들. iOS 6를 실행하는 iPad 3에서 완벽하게 작동하지만 내 1 세대에서 출시되지 않습니다.

어떤 아이디어가 진행되고 있을까요?

저는 ARC를 사용하지 않습니다.

+0

6에서 그들은 NIB의 견해가 유지되는 방식을 바꿨다고 생각합니다. 이 견해는 NIB에 있습니까? –

+0

아니에요. 내 모든 의견은 프로그래밍 방식입니다. – daveMac

+0

paren't view의 dealloc이 호출되고 있음을 확신합니다. 부모 뷰와 관련된 문제 일 가능성이 높습니다. – Shizam

답변

1

그래서 이것을 알아 냈습니다. iOS 6 SDK의 버그 인 것 같습니다. 아니면 그냥 이해할 수 없습니다. 나는 presentViewController : animated : 완료 :을 통해 다른 vc를 표시하는 UIViewController가 있습니다. 제시된 vc를 닫으면 릴리스되고 이후 모든 하위 뷰가 제거되고 모두 잘됩니다.

그러나 제시된 vc가 표시되는 동안 부모 vc를 제거/삭제하면 제시된 vc가 할당 취소되지만 하위 뷰는 removeFromSuperview에 전달되지 않습니다. 이것은 장비의 누수로 나타나지 않습니다. BUT 하위 뷰의 할당이 해제되지 않습니다.

이 때문에 나는 한 사람에 대한 설명, 또는 더 나은 이해가있는 경우

아이폰 OS 6에 기대하는 것처럼이 아이폰 OS (5) 모든 자료/할당 해제에 버그가 의심, 아이폰 OS 6에 발생하지 않습니다 이것, 나는 그들 자신에게 답을 보상하는 것을 좋아할 것이다.

2

보유하고있는 경우 해제해야합니다. 인스턴스 변수를 nil 할 수는 없습니다.

그래서 당신이 있다면 속성은 다음과 같습니다

- (void)dealloc 
{ 
    [myView release], myView = nil; 
    [super dealloc]; 
} 

또는이 :

- (void)dealloc 
{ 
    [self setMyView:nil]; 
    [super dealloc]; 
} 

또는이

@property (nonatomic, retain) UIView *myView; 

당신이있는 거 할당 해제는 다음과 같이 것 중 하나 :

- (void)dealloc 
{ 
    self.myView = nil; 
    [super dealloc]; 
} 

귀하의 재산은 다른 것을 보유하지 않는 한 제대로 해제됩니다.

+2

수정. ** 속성 **을 "그냥 버려서"놓을 수 있습니다. 하지만 인스턴스 변수 *를 nil로 설정하는 것은 5 또는 6에서 작동하지 않습니다 (ARC를 사용하지 않는 한). –

+0

@HotLicks 나는 항상 속성을 nil로 설정했고 그 것이 훌륭합니다. 나는 다른 문제가 그 문제라고 생각하며 현재 조사 중이다. 어떤 아이디어? – daveMac

+0

@daveMac -보기가 연결되는 방식과 관련하여 5와 6 사이의 변경 사항이 있습니다 ... 자세한 내용은 몰라요. 'retainCount'가 공식적으로 "의미가 없다"라는 평상시의주의와 함께 당신의 코드에 여기 저기에'retainCount' 로그를 두어 통찰력을 얻을 수있을 것입니다. –

0

뷰 컨트롤러는 뷰 컨트롤러가 dealloc 될 때 슈퍼 뷰에서 뷰를 제거 할 책임이 없습니다. 뷰 컨트롤러는 자체적으로 뷰 컨트롤러를 릴리즈 할 책임이 있습니다.

예를 들어보기 컨트롤러를 만들고보기를 요청한 다음 해당보기를 다른보기에 추가하고보기 컨트롤러를 버릴 수 있습니다. 이 경우 뷰 컨트롤러를 뷰 작성기로 사용하는 것입니다.

iOS 6에서 동작이 다른 이유는 모르겠지만 알고 싶습니다.

+0

api를 통해 presentViewController와 dismissViewController를 통해 뷰가 superview에서 제거됩니다. 게다가, 그 견해는 분명히 더 이상 보이지 않습니다. 부모보기 컨트롤러보기가 제거되면 모든 하위보기가 제거되지 않아야합니까? – daveMac

+0

그래서, 당신은 제거하고 부모 VC를 파괴, 그 부모 VC의보기 어떻게됩니까? 탈락 된 건가요? –

+0

어떻게 결정하겠습니까? 그것은 제거하고 vc를 파괴 할 때 자동으로 dealloc'd해야합니까? – daveMac

관련 문제