2010-08-06 3 views
0

나는 몇개의 문자열을 가지고있는 Location이라는 이름의 클래스를 가지고있다. View Controller에서이 클래스의 두 인스턴스를 사용하고 있는데 viewDidLoad에서 두 변수를 초기화 할 때 해당 메서드는 제대로 작동하지만 나중에 사용하려고하면 null이됩니다. 나는 그것들을 보유 된 속성으로 설정했다. 나는 그것들을 테스트했고 그것들이 viewDidLoad를 위해 초기화되었다는 것을 알았다. 위치 클래스에서 뭔가 특별한 것을해야만 출시되지 않도록 할 수 있습니까? 다른 방법으로 다시 초기화하면 모든 것이 원활하게 실행됩니다.viewDidLoad에서 초기화 된 변수가 Objective-C에서 값을 보유하지 않는 이유는 무엇입니까?

+0

"나중에"는 무엇을 의미합니까? 실제 예제를 줄 수 있습니까? – jtbandes

+0

self.variableName = ...을 사용하여 설정 하시겠습니까? 그렇지 않다면 그렇게하십시오. 그러나 그들이 "일찍"석방 되더라도 왜 그들이 null로 설정 될지 알기가 어렵습니다. viewDidUnload 메소드에서 해당 항목을 지우시겠습니까? 이는 언제든지 볼 수 없을 때 호출 할 수 있기 때문입니다. – Felixyz

+0

'@property (retain)'은 실제로 생성 된 getter와 setter의 축약이기 때문에 효과가있었습니다. autoreleased 오브젝트를 인스턴스 변수에 할당했을 가능성이 큽니다. 속성을 통해 설정하면 값이 유지됩니다. – Justin

답변

1

viewDidLoad에서 제대로 초기화 된 인스턴스 변수는 다른 방법과 마찬가지로 정상적으로 값을 유지해야합니다. 코딩 오류로 인해 설명하는 문제가 발생할 수 있습니다. 동일한 이름의 인스턴스 변수를 숨기고있는 viewDidLoad의 로컬 변수가있는 경우.

0

viewDidLoad가 완료된 후 자동 리프레시되거나 무언가가 초기화 되었기 때문에 사용자 (또는 이벤트 루프)가 초기화중인 객체를 릴리스하고있을 가능성이 높습니다. 이를 막으려면, "retain"속성을 가진 클래스에서 question 속성의 변수를 만들고 dealloc에서 nil로 설정하십시오.

+0

이렇게해도 아무 것도되지 않습니다. – Chuck

관련 문제