2

我正在开发一个启用了 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.这与on崩溃becomeFirstResponder。由于某些循环,看起来像一些与堆栈相关的崩溃。我对ARC相当陌生。的委托属性UITextView定义为assign(ARC 不应该将其解释为weak?)。我知道这种方法在记忆方面相当奇怪。但是,我想知道 ARC 是否可以处理这样的事情。显然不能。知道可能是什么问题以及如何解决它吗?

4

2 回答 2

1

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

于 2012-07-31T04:26:18.147 回答