3

我正在使用inputAccessoryView我的自定义子类之一UIViewController,其中子类UIResponder.

状态的Apple Developer Class Reference-[UIResponder inputAccessoryView]

想要将自定义控件附加到系统提供的输入视图(例如键盘)或自定义输入视图(您在inputView属性中提供的)的子类应该重新声明 [the inputAccessoryView] 属性readwrite并使用它来管理他们的自定义附件视图.

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

1 回答 1

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

  2. 我不这么认为;这与超类声明不兼容。

  3. 我不明白为什么这个属性不是nonatomic,因为从非主线程调用(几乎)UIKit 中的任何东西都是无效的。特别是,该属性是 a ,并且 setter 无法安全地在非主线程上UIView保留和释放s。UIView

    换句话说,如果从后台线程调用 setter,代码就会被破坏。如果只从主线程调用,则可以直接访问 ivar。因此,没有理由不能直接访问 ivar。

于 2011-11-19T15:27:06.980 回答