我试图在 Objective C 中为 UITextField 对象声明以下实例属性:
@property(nonatomic) BOOL clearsOnInsertion;
我应该在哪里声明它并将它正确地链接到我在 main.storyboard 中创建的文本字段,以便在用户开始输入时达到清除文本的预期效果?
最佳答案
一个。一般而言:
必须在 .h 文件中声明声明的属性是完全错误的:
a) 您必须在接口(interface)中声明实例属性。至少有三种类型的接口(interface):
- “真实”的主要(类)接口(interface),带有
@interface … : …
- 类延续
@interface …()
- 类接口(interface)
@interface …(…)
其中...
是一个类名。
b) 没有规定接口(interface)必须放在.h 文件中。没有规则。 通常 类延续位于 .m 文件中。这就是他们的目的(看 B)。 通常类别接口(interface)和类接口(interface)位于.h 文件中。但是,如果您想将一些小的东西保密,将类接口(interface)放在 .m 文件中也没有错。
对于编译器来说没有任何意义,因为它在编译的一开始就合并了所有包含的头文件,然后就不知道源代码是从哪里来的了。 (老实说,他知道它是为了更好的错误消息,但他的工作并不依赖于它。)
B.不太一般
您必须在某个位置放置一个界面,让应该阅读它的人,可以阅读它。由于属性通常是公共(public)可访问的并且 .h 文件是公共(public)可读的,因此很明显在许多情况下将它们放入 .h 是正确的选择。但是有一个信息隐藏和封装的私有(private)属性的概念。
C.在你的情况下
在早期,IB 只能读取 .h 文件中的导出。这样做的缺点是您必须将所有导出公开,即使存在私有(private)类 bundle 组合并且只有 IB 应该访问导出。
从版本 what.ever 开始,您可以将它放入 .m 文件中的类延续中,以保持它们的私有(private)性。在许多情况下,这是一个不错的选择。
关于ios - 我应该在 Objective C 中的什么地方声明一个实例属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914936/