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子类,并尝试将其代理设置为自己,你会看到相同的好奇行为。