我创建了一个方法 swizzled UITextField
的类别,它的名字像 UITextField+MaxLength
,我实现了 +load
方法来做 swizzled,但我没有在前缀头文件或其他文件中导入它,只是在 SomeViewController
中导入它。
我认为 swizzled 应该只在 SomeViewController
中工作,但为什么在每个 UITextField
甚至 UISearchBar
中调用 swizzled 方法?当我运行应用程序时调用 +load
方法?
编辑
我想我需要指出为什么我使用 swizzled,因为我想使用 KVO 来观察文本的变化,所以我调整了 setText
并关联了一个属性 NSNumber
命名为 displayLength
,所以,如果我不使用 KVO,我可以删除这个类别的混合部分,我可以将子字符串剪切到特定的最大长度。
最佳答案
Swizzling 发生在运行时;如果您执行调配,它会真正改变该类方法的实现。就像您将代码更改为 UITextField
一样。
这就是为什么方法调配是如此罕见和危险的事情。如果您只想更改 UITextField
的特定实例,子类化(或者,从您的类别标题猜测您的意图,使用委托(delegate))。
关于ios - objective-c 中的方法在任何地方都有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274882/