“self.delegate = self”在使用ARC的iOS上无法正常工作

时间:2011-10-28 06:47:22

标签: ios static uitextview automatic-ref-counting uitextviewdelegate

我正在开发支持ARC的iOS SDK 4项目。

我的类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 个答案:

答案 0 :(得分:1)

我认为它与ARC和内存管理无关,而只是UITextView不能成为其自身委托的更基本问题。它被锁定在一个循环中。将日志消息放在textViewDidChangeSelection中,您将看到它被重复调用。不是内存问题,而是UITextView代表的逻辑问题。即使你没有做有问题的showInViewController,但只是创建一个标准的UITextView子类并尝试将其委​​托设置为自己,你会看到同样的奇怪行为。

答案 1 :(得分:0)