gpt4 book ai didi

iphone - 为什么 UIResponder inputAccessoryView 是原子的?

转载 作者:行者123 更新时间:2023-12-03 19:58:00 27 4
gpt4 key购买 nike

我将 inputAccessoryView 用于 UIViewController 的自定义子类之一,它是 UIResponder 的子类。

Apple Developer Class Reference for -[UIResponder inputAccessoryView]状态:

Subclasses that want to attach custom controls to either a system-supplied input view (such as the keyboard) or a custom input view (one you provide in the inputView property) should redeclare [the inputAccessoryView] property as readwrite and use it to manage their custom accessory view.

  1. 重新声明 inputAccessoryView 后,我必须再 @synthesize 吗?这样做似乎是编译它的唯一方法,但我想使用 Apple 的 inputAccessoryView ivar,而不是合成我自己的。
  2. 我可以将 inputAccessoryView 重新声明为 nonatomic 吗?
  3. 如果我无法将 inputAccessoryView 重新声明为 nonatomic,那么我必须始终使用 self.inputAccessoryView 访问 inputAccessoryView ,即通过属性而不是直接访问 ivar,以保持线程安全?

最佳答案

  1. 是的,您必须自己为该属性提供 setter,除非 UIResponder 公开 setInputAccessoryView: 方法。如果您有权访问底层 ivar,您可以自己编写一个 setInputAccessoryView: 方法来设置它。但在这种情况下,您无权访问它,因此您必须自己创建一个。

  2. 我不这么认为;这与父类(super class)声明不兼容。

  3. 我不明白为什么这个属性不是非原子,因为从非主线程调用(几乎)UIKit 中的任何内容都是无效的。特别是,此属性是一个 UIView,setter 无法在非主线程上安全地保留和释放 UIView

    换句话讲,如果从后台线程调用 setter,则代码无论如何都会被破坏。如果仅从主线程调用,则可以直接访问ivar。因此,您没有理由不能直接访问 ivar。

关于iphone - 为什么 UIResponder inputAccessoryView 是原子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8194366/

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