objective-c - 我可以检测到: "Does class overload method of base class"?吗

标签 objective-c oop runtime overriding nsobject

我的类中有两个方法

- (void)configureWithDictionary:(NSDictionary*)dictionary;
- (void)configureWithDictionary:(NSDictionary*)dictionary withOptions:(XWTreeItemConvertationToNSDictionaryOption*)options;

我对它们都有实现。所以!像这样的解决方案:“只需添加 NSAssert(NO, @"You mast override this method")"将无济于事 =(

- (void)configureWithDictionary:(NSDictionary*)dictionary withOptions:(XWTreeItemConvertationToNSDictionaryOption*)options;
{
    NSAssert(NO, @"You mast override this method"
}

因为我那里有一些代码。并且需要在重载方法中编写[super configureWithDictionary:dictionary withOptions:options];。 每个人都可以使用这个方法。我两者都需要!但是。

如果某些开发人员重载-[MYClass configureWithDictionary:],它可能会“工作不正确”。只是因为这个方法不会随时调用。所以我需要在控制台写一些东西。例如:“请重载方法:-[MYClass configureWithDictionary:withOptions:]”。我只想在这个方法中处理一次:

+ (void)initialize
{
    if (self == [self class]) {

    }
}

但我找不到任何解决方案(在 Documentation/google/stackoverflow 中)。并且无法处理:“开发人员是否重载基类的方法”。

也许有更好的解决方案。但我觉得应该是最好的。如果您还有其他想法。请写在下面=)

我只找到了方法:+[NSObjectinstanceRespondToSelector],当然我知道-[NSObject respondsToSelector:],但正如你所知,它总是返回YES。我需要几乎相同的,但对于当前类忽略基础。

PS。无论如何,感谢您的关注。指向文档或某些文章的链接将会非常有帮助。

最佳答案

可能这并不完全是您所要求的,但是当我需要确保子类重载某些必需的方法时,我会这样做:

@protocol SomeClassRequiredOverload

- (void) someMethodThatShouldBeOverloaded;

@end

@interface _SomeClass
@end

typedef _SomeClass<SomeClassRequiredOverload> SomeClass;

关于objective-c - 我可以检测到: "Does class overload method of base class"?吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33127740/

相关文章:

c# - 在 C# 中进行运行时转换?

javascript - 如何创建一个可以在我的 JS 文件之外访问的全局 javascript 对象?

java工厂和观察者模式

xna - 在 XNA 中运行时从图像加载纹理有什么风险?

iphone - 确定 UILocalNotification 是在前台还是后台通过应用程序触发的

PHP 子类不调用其父类构造

C# - 不同的 .NET 框架版本

ios - -[UITableView _endCellAnimationsWithContext : 中的断言失败

objective-c - 在 Objective-C 中生成随机数

ios - 延迟在 UITableView 中插入行