我可以在 Objective-C 中通过
getClassFromString:
和 performSelector:
调用私有 API 的方法,或者使用 Dynamic 库在 Swift 中轻松调用它们。但是,我无法为私有 API 设置委托,因为我无法动态获取协议并使类符合它。
我尝试复制协议的定义并使类符合它,然后在 Objective-C 中使用
[/*id*/ performSelector:NSSelectorFromString(@"setDelegate") withObject:[[MyDelegate alloc] init]];
。但好像没有什么效果
Objective-C 并不真正关心设置为委托的对象是否实际上符合协议。如果没有,则会出现运行时崩溃,但只要您的类正确实现了协议方法,您就可以将其分配为委托。
您的代码最有可能发生的情况是声明了私有类的委托
weak
,并且由于没有其他东西保留它,因此它立即被释放。
如果您保留对
MyDelegate
的强引用,然后将其分配给私有类,它可能会起作用。