2009-10-05 5 views
0

나는 이치에 맞지 않는 prob에 머리를 부러 뜨 렸습니다.대리인의 개체 속성 액세스

AppDelegate에 MyClassA MyClassB가 MyViewController

이 MyClassA에서 이름 ClassB가에 의해 형 MyClassB의 속성이 : 나는 내 프로젝트에서 다음이 있다고. MyClassB에는 포인터 이름 myArray로 NSMutableArray 유형의 속성이 있습니다.

다음과 같은 viewDidLoad에 아래 MyViewController에 나는 그것 (MyClassA의) MyClassB 속성의에서 myArray에 액세스 할 수 MyClassA를 인스턴스화하는 경우 :

MyClassA *classA = [[MyClassA alloc] init]; 
NSLog([NSString stringWithFormat:@"%i", [[[classA classB] myArray] count]); 

이 성공적으로 로그의 수를 표시하고 동일한에서됩니다 시간, 배열 내용에 대한 추가 액세스 잘 작동합니다.

그러나, 여전히 MyViewController에있는 MyClassA 인스턴스화 및 대리자에서 액세스 할 때 다음과 같이

AppDelegate *aDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSLog([NSString stringWithFormat:@"%i", [[[aDelegate classA] classB] myArray] count]]); 

로그가 여전히 수를 표시합니다 성공적으로의 내용에 하지만 더 접근 배열은 오류를 보이지 않고 "현재 언어 : 자동 현재 objective-c"입니다. 단지 한 줄입니다.

이것은 이상한 행동입니다. 대리자에서 인스턴스화 된 개체와 함수 (예 : ViewController의 viewDidLoad)에서 개체에 로컬로 액세스하는 것과는 다른 점이 있습니까?

도움말 매우 인해 액세스 = D에게

답변

1

응용 프로그램이 충돌되는 것처럼 소리를 감사 이미 메모리를 해제 할 수 있습니다. 이 문제를 더 자세히 조사하려면 환경 변수를 YES (XCode의 실행 설정)으로 설정하는 것이 좋습니다.

이 특정 경우에는 classA 대리자의 멤버 변수가 얼마나 정확하게 초기화되고 어떻게 액세스되는지 알면 좋습니다. 어쩌면 모든 변수 (classA, classB 또는 myArray가 될 수 있음)가 자동으로 재생되거나 (또는 ​​편리한 메소드를 사용하여 생성 된) 유지되지 않을 수 있습니다. 다음 번에 자동 회수 풀이 비워 질 때까지이 멤버 변수에 액세스 할 수 있습니다.

+0

활성 구성이 디버그로 설정되어 있는지 확인하여 중단 점을 더 잘 검사 할 수 있습니다. – Jordan