如何根据 BOOL 值从其他类隐藏已实现的委托方法?- 奥布耶西特维·



我需要在类中隐藏自定义delegate UIViewController实现的方法,具体取决于BOOL属性"isHidden"。我从 2 个地方调用一个UIViewController,我需要隐藏其中一个类的委托方法。例如类 A 和 B 调用我的 UIViewController 并使用 respondsToSelector:@selector(myMethod) 检查此方法,如果BOOL属性为 TRUE,则让respondsToSelector方法返回TRUE值,否则 - FALSE 。这可能吗?

让委托调用这些方法.. 并根据布尔值在其中执行任务或只是让它通过...

嗯...可以通过运行时交换选择器的实现(例如,交换到什么都不做的实现),但这是一个糟糕的解决方案。这会影响所有实例 - 这种方法使单例看起来像黄金。

相反,请考虑将条件引入myMethod,因此myMethod不会动态地执行任何操作。

有一种模式,您可以在其中定义委托方法,如下所示:

@protocol MyObjectDelegate <NSObject>
    - (void)myObject:(id)myObject processSomeData:(id)someData;
@end

因此,委托控制器知道哪个对象请求此方法,并可以决定要执行的操作。此外,您可以添加一些类似的方法,以在对象实际发送消息之前通知对象是否有权访问此方法

- (BOOL)myObjectCanProcessSomeData:(id)myObject;

当然,有一些技术可以通过与Objective-C运行时交互来添加和删除对象方法,但我不确定这是否是一个好主意。

最新更新