我正在开发支持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是否可以处理这样的事情。显然它不能。知道可能是什么问题以及如何解决它?
答案 0 :(得分:1)
我认为它与ARC和内存管理无关,而只是UITextView
不能成为其自身委托的更基本问题。它被锁定在一个循环中。将日志消息放在textViewDidChangeSelection
中,您将看到它被重复调用。不是内存问题,而是UITextView
代表的逻辑问题。即使你没有做有问题的showInViewController
,但只是创建一个标准的UITextView
子类并尝试将其委托设置为自己,你会看到同样的奇怪行为。
答案 1 :(得分:0)