gpt4 book ai didi

ios - "self.delegate = self"无法在使用 ARC 的 iOS 上工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:04 24 4
gpt4 key购买 nike

我正在开发启用了 ARC 的 iOS SDK 4 项目。

我的类 MyTextView(派生自具有 UITextViewDelegate 协议(protocol)的 UITextView)实现了以下静态方法:

+ (void)showInViewController:(UIViewController*)viewController
{
MyTextView *textEdit = [[MyTextView alloc] init];
textEdit.delegate = textEdit;
[viewController.view addSubview:textEdit];

// Show the keyboard
[textEdit becomeFirstResponder];
}

在我的一个 View Controller 中,我调用了以下内容:

[MyTextView showInViewController:self]

这会在 becomeFirstResponder 上崩溃并显示 warning: Unable to restore previously selected frame.。由于某些循环,看起来像一些与堆栈相关的崩溃。我对 ARC 还很陌生。 UITextView 的委托(delegate)属性定义为 assign(ARC 不应该将其解释为 weak 吗?)。我知道这种方法在内存方面相当奇怪。但是,我想知道 ARC 是否可以处理这样的事情。显然不能。知道可能是什么问题以及如何解决它吗?

最佳答案

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

关于ios - "self.delegate = self"无法在使用 ARC 的 iOS 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7926002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com