gpt4 book ai didi

ios - #define 或 const 字符串*

转载 作者:可可西里 更新时间:2023-11-01 03:12:02 25 4
gpt4 key购买 nike

我知道这个问题已经被问过好几次了,但我的情况略有不同。在将其作为副本关闭之前,请完整阅读。stack overflow 上有很多帖子说,“就个人而言,我讨厌 MACROS,不要使用那个狗屎”。我已经阅读了所有这些内容,但我的情况有所不同。我正在尝试使用 #define 宏定义软件(iOS 应用程序)中使用的 URL。

我同意使用 const 字符串比 #define 宏更好。但是,在接受查询参数作为 URL 的一部分的越来越多的基于 REST 的 API 世界中,您如何仍然使用 const 字符串来表示发生变化的 URL?

而不是 http://api.myblog.com/posts?entryid=%@一个遵循 REST 原则的 API 服务器 http://api.blog.com/posts/entries/[entryid]

在前一种类型中,URL 是 http://api.myblog.com/posts对于所有条目,它们不会改变。 const 字符串是可能的。

在后一种类型中,URL 随每个条目而变化,我使用一个扩展为完整 URL 的宏,就像这样。

#define GET_ENTRY_URL(__MY_ENTRY_ID__) [NSString stringWithFormat:@"http://api.myblog.com/posts/entries/%@", __MY_ENTRY_ID__];

我的方法是否存在设计缺陷?想知道您的意见。

谢谢。

最佳答案

从编译器的角度来看,#define是一个预处理器指令(引用c中的定义,http://en.wikipedia.org/wiki/C_preprocessor)。

在这种情况下,编译器可能会在编译您的代码之前进行整个文本替换。

例如:如果您定义:

#define GET_ENTRY_URL(__MY_ENTRY_ID__) [NSString stringWithFormat:@"http://api.myblog.com/posts/entries/%@", __MY_ENTRY_ID__];

它可能会在您的代码中用 [NSString ..., x] 替换每次出现的 GET_ENTRY_URL(x)。如果 objective-c 的实现遵循这一点,则可能会在我们使用宏的任何地方创建实例。

static const/variable 似乎是更好的方法。

关于ios - #define 或 const 字符串*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8032849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com