【发布时间】:2013-01-02 21:15:29
【问题描述】:
我有意使用类别来覆盖我知道已在主类上实现的方法。我知道这通常是设计薄弱的标志——请不要讲课——但在这种情况下我不能干净地继承子类。我知道swizzling 也可能是一种选择。
但是现在,我怎样才能抑制这个警告呢? llvm 抛出一个我可以禁用的编译器警告 (diagnostic ignored "-Wobjc-protocol-method-implementation")。但随后链接器也会抱怨。
This asks a similar question but was looking for a different answer.我如何告诉链接器不要抱怨?
谢谢。
【问题讨论】:
-
您可能无法抑制警告,因为实际上它应该是一个硬错误。
-
@bbum:谢谢。你觉得这个说法对吗? “这是一个严厉的警告,因为重要的是要防止人们通过意外这样做,从而巧妙地搞砸一些事情。类别用于全局增强功能,子类用于扩展或在某些情况下 override 功能。如果必须在没有子类化的情况下进行覆盖,则 swizzling 是一种更有意且更少(对于“更少”的定义)脆弱的方式。”
-
我会说 swizzling 是精确的,但并没有那么脆弱,因为您仍然假设您的实现与原始的内部实现细节完全兼容(即使您确实调用了原始,仍然存在大量假设)。
-
不是骗子,真的,因为问题是关于 linker 而不是编译器。另一个问题并非特定于编译器,但大多数答案都是。你不能用编译指示或
-W来解决它。
标签: ios objective-c linker objective-c-category