防止重复输入消息

Posted

技术标签:

【中文标题】防止重复输入消息【英文标题】:Preventing duplicate entry messages 【发布时间】:2015-11-04 01:01:15 【问题描述】:

我有两个几乎相同的类,但一个是为 OS X 制作的,另一个是为 ios 制作的。然后我有一个这样的头文件:

#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
#import "ClassForOSX.h"
#else
#import "ClassForIOS.h"
#endif

问题是因为这两个类都包含在项目中,xcode 编译两者,我有很多重复的错误条目,因为方法在两个类上具有相同的名称。

有没有办法阻止一个类编译,即使它包含在项目中,除非该类是为目标设计的?

是的,我知道我可以从目标中包含/排除类,但我正在处理双方和多个目标中的数百个类,这会产生很多最终会出错的包含/排除操作。我想知道如果目标正确,代码中是否有一些解决方案可以只允许类编译。

【问题讨论】:

【参考方案1】:

使用目标最适合您的情况。但是你可以在代码中做到这一点

注意在 target->Build Settings 的 Preprocessor Macros 中添加或删除 __MAC_OS_X_VERSION_MIN_REQUIRED

ClassForIOS.h 文件

#ifndef __MAC_OS_X_VERSION_MIN_REQUIRED

#import <Foundation/Foundation.h>

@interface ClassForIOS : NSObject

// interface

@end

#endif

ClassForIOS.m 文件

#ifndef __MAC_OS_X_VERSION_MIN_REQUIRED

#import "ClassForIOS.h"

@implementation ClassForIOS

// implementation code

@end

#endif

ClassForOSX.h 文件

#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED

#import <Foundation/Foundation.h>

@interface ClassForOSX : NSObject

// interface

@end

#endif

ClassForOSX.m 文件

#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED

#import "ClassForOSX.h"

@implementation ClassForOSX

// implementation code

@end

#endif

【讨论】:

这个答案的第一句话很重要:“使用目标最适合您的情况”。这就是目标的用途。有一个 OS X 目标,一个 iOS 目标,为每个目标添加适当的源文件。如果由于某种原因这不起作用,那么只有在那时,提交一个错误并遵循上面给出的其余解决方案。您不使用目标的理由对我来说毫无意义;在所有源文件中维护#ifdefs 与使用目标一样复杂且容易出错,在这两种情况下,如果操作不正确,则会出现构建错误,因此正确维护目标很容易。

以上是关于防止重复输入消息的主要内容,如果未能解决你的问题,请参考以下文章

Kafka二十三Kafka优化之防止消息丢失和重复消费

发件箱模式 - 我们如何防止消息中继进程生成重复消息?

防止重复的 websocket 消息 Laravel Echo 和 React

kafka防止消息重复消费

Spring Cloud Stream 如何防止应用程序的实例接收重复消息?

如何防止重复消息在 WebJob 处理时不插入到服务总线队列中?