我的问题可能看起来很奇怪,但我想围绕Stackers的想法得到这个想法,在我的工作中我只是注意到每个协议都是由类一直遵守,我想知道是否有可能使一个简单的对象符合对于协议,如果不是(几乎没有),为什么不呢?
感谢您的关注
答案 0 :(得分:1)
协议一致性分为两部分:
YES
那么,我们可以安排一个NSObject
的实例来满足这两个条件吗?是。事实上,至少有两种方法可以做到这一点。首先,让{em>所有实例NSObject
符合协议。我们所做的是在NSObject
上的类别中定义协议方法,这解决了第一部分。然后我们“swizzle”(这意味着使用class_replaceMethod()
运行时函数)-[NSObject conformsToProtocol:]
,返回YES
作为我们有趣的协议。
现在让我们假设您希望NSObject
的特定实例符合协议。这稍微容易一些。首先,创建一个符合协议并实现所需方法的NSObject
子类;没有必要覆盖-conformsToProtocol:
,因为运行时库可以看到此类符合。现在,在运行时,使用NSObject
实例并调用object_setClass()
将其类切换到符合要求的子类。
答案 1 :(得分:0)
您可以使用运行时函数class_addProtocol()
在运行时向类添加协议。但是,当类没有实现协议的所有方法时,这样做可能会导致不良结果。