0

我为方法 swizzled 创建了一个类别UITextField,它的名字是这样的UITextField+MaxLength,我实现了+load做 swizzled 的方法,但是我没有在前缀头或其他文件中导入它,只是在SomeViewController.

我认为 swizzled 应该只适用于SomeViewController,但为什么 swizzled 方法在每个UITextField甚至 a中都被调用UISearchBar+load当我运行应用程序时调用该方法?

编辑

我想我需要指出为什么我使用 swizzled,因为我想使用 KVO 来观察文本的变化,所以我 swizzledsetText并关联了一个NSNumber名为的属性displayLength,所以,如果我不使用 KVO,我可以删除 swizzled 的部分这个类别,我可以将子字符串剪切到特定的最大长度。

4

1 回答 1

2

Swizzling 发生在运行时;如果您执行 swizzle,它会真正改变该类方法的实现。就像您将代码更改为UITextField.

这就是为什么方法调配是如此罕见和危险的事情。如果您只想更改UITextField, 子类的特定实例(或者,从类别标题中猜测您的意图,请使用委托)。

于 2016-09-01T15:03:24.447 回答