代码之家  ›  专栏  ›  技术社区  ›  Joe

为什么使用Objective-C/Cocoa中的宏?

  •  4
  • Joe  · 技术社区  · 14 年前

    为什么在Cocoa中使用宏?我突然想到的两件事是 NSLocalizedString NSAssert (和 STAssert

    这仅仅是过去的事情还是有特定的原因?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Georg Fritzsche    14 年前

    一般来说,最好避免使用宏,但对于 NSAssert()

    __LINE__ , __FILE__ , _cmd self 从上下文来看。如果不是宏,它就无法访问这些信息。

    为了 NSLocalizedString

        2
  •  4
  •   JeremyP    14 年前

    NSLocalizedString是一个方便的宏,可能是一个函数。

    然而,除了Georg的答案中给出的宏之外,NSAssert和friends是宏的原因还有很多。NSAssert计算布尔表达式以确定是否应引发异常。这个布尔表达式在计算上可能非常昂贵,并且不是您希望在发布代码中发生的那种事情。在C中(因此Objective-C)没有一种机制可以忽略发布版本的正常函数调用,而无需求助于预处理器或使用以下内容:

    if (debug)
    {
        assertAsAFunction(foo == 3, "foo should be 3");
    }
    

    NSAssert宏的另一个优点是可以将条件字符串化,以便在日志消息中使用。