2013-03-19 5 views
0

나는 BOOL 속성 (포인터가 아님)이있는 뷰 컨트롤러를 가지고 있거나, viewDidLoad에 할당되지 않은 것처럼 보이는 쓰레기를 볼 수 있습니다. BOOL은 필요할 때 할당됩니다. 뷰 컨트롤러가 할당 해제되면 (아크를 사용하고 있습니다) 나중에 재 작성합니다. 이전 인스턴스 값이 BOOL 인 경우 (VC가 할당 해제되기 전에) 새 인스턴스 BOOL 변수의 초기 값도 YES가됩니다. 이걸 아주 이상하게 생각해.기본 형식 상태가 인스턴스간에 보존되는 이유는 무엇입니까?

  1. 는 속성 선언 (비 원자 할당)
  2. 가 dealloc을 변경하지,있는 viewDidLoad에서 설정 작업 방법의 다른 설정 아니에요

나는 이것이 그 동안, 이상한 알고 viewDidLoad에 적절한 기본값을 설정했습니다. BOOL 할당 전에 이것이 바르로 BOOL (I는 속성에 변화)와 비교하여 일어나고 염두

UPDATE

베어링 하였다. 나는 그 이상한 행동을 저지르고있다. 더 많은 값은 그러나 ==0 :

있습니다 !=0보다이기 때문에 쓰레기와

+0

보기 컨트롤러가 느린로드되고 부모보기 컨트롤러에 의해 부하 사이에 보관됩니까? –

+0

그것은 다시 만들어지는 부모이므로 계층 구조의 나머지 부분입니다. 나는 dealloc에 ​​중단 점을 고착 시켰고 메모리 주소를 확인한 것과 같은 인스턴스가 아니라는 점에 긍정적입니다. 게다가 시각적 인 표시가 있습니다. D – BodaciousPie

+0

Strange. 정적 BOOL로 선언됩니까? –

답변

0

모든 인스턴스 변수이기 때문에 AFAIK 유형 BOOL의 인스턴스 변수 (NO에 초기화됩니다, NO보다 YES을 얻기의 훨씬 더 큰 기회가있다 0으로 설정), 내가 그것을 찾지는 않았을지라도, 이것은 ivars를 뒷받침하는 자동 합성 된 속성에 대해서도 마찬가지라고 가정 할 것입니다. 그럴 때마다 NO이됩니다.

항상 이전 상태를 반영하고 있습니까? 이자형. YESNO 모두 dealloc 후에 보존됩니까? 내 생각 엔 위의 가정이 올바르지 않거나 인스턴스가 실제로 dealloc'ed되지 않습니다. 인스턴스 주소가 같을 지 확인 했습니까?

+0

주소를 확인한 결과 일치하지 않습니다. 이전 인스턴스가 BOOL 등록 정보 값이 YES로 할당 해제 된 경우 새 인스턴스는 처음에 YES 값을 보유하고 그 반대의 경우도 마찬가지입니다. – BodaciousPie

+0

질문에 코드를 추가해야 할 것 같습니다. 설명에서 나는 그게 무엇인지 모릅니다. –

0

처음에는 인스턴스간에 보존 된 전역 변수였습니다.

관련 문제