2

我正在開啓啓用ARC的iOS SDK 4項目。「self.delegate = self」無法在iOS上使用ARC

我類MyTextView(來自UITextView的衍生自具有UITextViewDelegate協議)實現了以下的靜態方法:

+ (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

甚至不足以讓這個答案,但可能[超setDelegate:自我];解決它。 – Aberrant

回答

1

我不認爲它與ARC和內存管理有什麼關係,但只是一個更基本的問題,UITextView不能成爲它自己的代表。它被鎖定在一個循環中。在textViewDidChangeSelection中放入日誌消息,您將看到它被重複調用。不是內存問題,而是代表UITextView代表的邏輯問題。即使你沒有做出有問題的showInViewController,但只是創建一個標準的UITextView子類,並嘗試將其代理設置爲自己,你會看到相同的好奇行爲。