2

ARC가 활성화 된 iOS SDK 4 프로젝트에서 작업 중입니다.ARC를 사용하여 iOS에서 "self.delegate = self"가 작동하지 않습니다.

내 클래스 MyTextView (UITextViewDelegate 프로토콜 UITextView에서 파생 된) 다음과 같은 정적 메소드를 구현 : 나는 다음과 같은 호출 내보기 컨트롤러 중 하나에서

+ (void)showInViewController:(UIViewController*)viewController 
{ 
    MyTextView *textEdit = [[MyTextView alloc] init]; 
    textEdit.delegate = textEdit; 
    [viewController.view addSubview:textEdit]; 

    // Show the keyboard 
    [textEdit becomeFirstResponder]; 
} 

을 :

[MyTextView showInViewController:self] 

warning: Unable to restore previously selected frame.와 충돌 becomeFirstResponder에 있습니다. 일부 사이클 때문에 스택 관련 충돌이 발생하는 것처럼 보입니다. 나는 ARC에 상당히 익숙하다. UITextView의 대리자 속성은 assign으로 정의됩니다 (ARC는이를 weak으로 해석해서는 안됩니까?). 나는이 접근법이 약간 이상한 기억인지를 안다. 그러나 ARC가 그런 일을 처리 할 수 ​​있는지 알고 싶었습니다. 분명히 그것은 할 수 없습니다. 어떤 아이디어가 문제 일 수 있으며 어떻게 해결할 수 있습니까?

+2

주기는 일반적으로 충돌이 발생하지 않는 유지 - 그들은 단지 어느 것을에서 개체를 방지 할당이 취소되었습니다. – Caleb

+0

감사 Caleb. 그에 따라 제목을 수정했습니다. –

+0

답변을하기에 충분하지 않겠지 만 [super setDelegate : self]; 그것을 해결합니다. – Aberrant

답변

1

나는 ARC와 메모리 관리와 관련이 없다고 생각하지만, UITextView은 그 자체의 델리게이트가 될 수없는 근본적인 문제라고 생각합니다. 루프로 잠긴다. 로깅 메시지를 textViewDidChangeSelection에 넣으면 반복적으로 호출되는 것을 볼 수 있습니다. 메모리 문제가 아니라 메시지가 아니라 UITextView 대리인의 논리 문제입니다. 문제가있는 showInViewController을 수행하지 않고 표준 UITextView 하위 클래스를 만들고 대리인을 자체로 설정하려고해도 동일한 호기심을 보일 것입니다.

관련 문제