gpt4 book ai didi

objective-c - 如何像常量一样声明我自己的 CGRectZero?

转载 作者:太空狗 更新时间:2023-10-30 03:12:27 26 4
gpt4 key购买 nike

这是一个新手 C/Objective-C 问题 :-)

假设我想要一个 CGRectOne 和一个 CGRectTwo 常量。

我该如何声明?

谢谢,杰里米

最佳答案

其他答案很好-在某些情况下-。

A) 将其声明为 static 将在每次翻译时发出一个副本。如果它对一个翻译可见(即它的定义在您的 .m/.c 文件中),那很好。否则,您最终会在每个包含/导入带有静态定义的 header 的翻译中得到副本。这可能会导致二进制文件膨胀,并增加您的构建时间。

B) const CGRect CGRectOne = {...}; 将在声明的范围内发出一个符号。如果这恰好是对多个翻译可见的 header ,您最终会遇到链接错误(因为 CGRectOne 定义了多次——例如,每个 .c/.m直接或间接包含定义常量的 header 的文件)。

现在您知道了在其中使用这两个声明的上下文,让我们介绍 extern 方式。 extern 方式允许您:

  • 在标题中声明常量
  • 在许多翻译中使用常量
  • 同时发出常量的一个定义

extern 方法非常适合在多个文件中重用常量。这是一个例子:

文件.h

// the declaration in the header:
extern const CGRect CGRectOne;

File.c/m

// the definition:

#import "File.h"

const CGRect CGRectOne = { { 0.0f, 0.0f }, { 1.0f, 1.0f } };

注意:省略 const 只会使其成为全局变量。

关于objective-c - 如何像常量一样声明我自己的 CGRectZero?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4689964/

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