加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 是否可以为必须覆盖的方法创建警告?

发布时间:2020-12-16 09:49:17 所属栏目:百科 来源:网络整理
导读:参见英文答案 Implement a pure virtual method in Objective-C????????????????????????????????????6个 我正在阅读 Creating an abstract class in Objective-C,我对这个类的“抽象性”仅在运行时强制执行这一事实并不十分满意.如果方法没有在子类中实现,
参见英文答案 > Implement a pure virtual method in Objective-C????????????????????????????????????6个
我正在阅读 Creating an abstract class in Objective-C,我对这个类的“抽象性”仅在运行时强制执行这一事实并不十分满意.如果方法没有在子类中实现,我希望能够显示一些警告.理想情况下,这可以缩减为一个或两个#defines.

是否巧妙地使用__attribute((可用,已弃用等))__或#warning以及一些可以实现此目的的#pragma clang诊断推送?

我认为这是可能的;我只是不太了解Clang想出来的.

编辑:

没有必要告诉我我应该使用协议.我已经将它们用于此目的.我更好奇的是,它是否可以完成(了解更多关于Clang)而不是它是否应该完成.

我看到这与NSManagedObject类似,需要将属性标记为@synthesized或@dynamic.我已经研究了这个,我看到在NSManagedObject.h中,该类被标记为NS_REQUIRES_PROPERTY_DEFINITIONS,它转换为NSObjCRuntime.h中的__attribute __((objc_requires_property_definitions)).是否有一些创造性的使用这些内置的#defines可以使这个工作吗?

编辑#2:

对于那些说抽象超类不是Objective-C方式的人,我将引导你到documentation for UIMotionEffects

Subclassing Notes

This class is abstract and cannot be instantiated
directly.

解决方法

我更喜欢 NSException方法(这是一个运行时,而不是编译时,错误).

在你的超类中:

@interface NSSuperclass : NSObject

- (void)execute;

@end


@implementation NSSuperclass

- (void)execute
{
    @throw [NSException exceptionWithName:NSInternalInconsistencyException
                                   reason:[NSString stringWithFormat:@"Called %@ on superclass NSSuperclass,this should only be called on subclasses",NSStringFromSelector(_cmd)]
                                 userInfo:@{@"object": self}];
}

@end

然后在子类中重写此方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读