2016-08-14 2 views
0

대리인이 (IBAction 메서드 내에서) 호출되지만 시뮬레이터에서 iPhone 4S에서만 임의의 시간이 지나면 응용 프로그램이 충돌합니다. 다른 모든 최신 iPhone도 훌륭하게 작동합니다.iPhone 4S에서만 대리인에 액세스 할 수 없음

@propert (assign, nonatomic) id <MyDelegate> delegate; 

물론 ARC를 사용하고 있습니다. 그 이유는 무엇일까요?

해결 : 일부 조건에서 대리자 메서드를 전달하는 인수가 실수로 메모리에서 해제되었습니다. 그것을 강한 타입으로 바꾸면 도움이되었습니다.

+0

주로 ... 데드 레퍼런스를 중심으로. 일부 코드, 호출 스택,이 델리게이트와 MyDelegate protocle 선언을 사용하는 클래스의 오류 로그를 게시 할 수 있습니까? –

+0

질문과 같이 코드를 추가했습니다. – loup4

답변

2

이유는 assign을 사용하고 있기 때문입니다. 기본적으로 을 의미합니다. delegate이 사라지면 쓰레기를 가리키고 나머지는 그 쓰레기에 액세스하려고하면 충돌이 발생합니다. 실제로 ARC가 제공하는 이점을 버렸습니다.

이점을 복원하려면 대신 weak을 사용하십시오. 이제 delegate이 사라지면 nil이되며 좋은 순서로 진행할 수 있습니다.

가 충돌을 없애받은 데, 당신은 지금 nil 확인하고 당신은 분명히 그것을 기대하지 않을 때 당신의 delegate가 존재 나간 이유 을 알아 내려고 시도 할 수 있습니다. 지금보고있는 문제는 "진단"이라고 불리는 것입니다. 대의원은 오래 전에 존재하지 않았을 수도 있고, 처음에는 배정되지 않았을 수도 있습니다. 그러나 그 일은 완전히 별개의 문제입니다.

관련 문제