【发布时间】:2011-10-28 06:47:22
【问题描述】:
我正在开发一个启用了 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]
这在becomeFirstResponder 上与warning: Unable to restore previously selected frame. 一起崩溃。由于某些循环,看起来像一些与堆栈相关的崩溃。我对ARC相当陌生。 UITextView 的委托属性定义为 assign(ARC 不应该将其解释为 weak 吗?)。我知道这种方法在记忆方面相当奇怪。但是,我想知道 ARC 是否可以处理这样的事情。显然不能。知道可能是什么问题以及如何解决吗?
【问题讨论】:
-
保留周期通常不会导致崩溃——它们只是防止对象被释放。
-
谢谢迦勒。我相应地修改了标题。
-
甚至不能确定这个答案,但也许 [super setDelegate:self];解决它。
-
赋值不等于弱。 Weak 很像 assign,但是一旦所有的强引用被释放,弱变量就会变成 nil。
-
@chrispix:不,我更改了类方法以返回指向实际对象的指针。
标签: ios static uitextview automatic-ref-counting uitextviewdelegate