objective-c - 如何在多个类中使用 C 风格结构

标签 objective-c c struct

我想在几个类中使用 C 风格的结构,但我在其(全局)访问方面遇到了困难。

我在“Utilities”类的头文件中定义了结构体:

typedef struct
{
    int        length;
    SInt16     *someData;
} NewStruct;


+ (NewStruct *)initStructWithValue:(int)length;

在另一个类中,我使用 Utitlities 的类方法初始化此结构:

@property (nonatomic, assign) NewStruct  *newStruct;

_newStruct = [Utilities initStructWithValue: 5]

现在我想在其他类中使用newStruct。然而,当我把

extern NewStruct *newStruct; 

在头文件的顶部它不起作用,看来我无权访问 newStruct。

我收到错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我做错了什么以及最好的方法是什么?或者最好避免使用此结构作为全局变量?

最佳答案

extern 关键字的意思是“声明而不定义”。换句话说,它是一种显式声明变量或强制声明而不定义变量的方法。但是,当链接器组装您的目标代码时,它需要在某处定义变量,这意味着您必须有一个变量所在的源,而无需使用 extern 关键字 NewStruct *newStruct;

通过上述方法,您将此变量视为全局单例。如果您需要多个实例,您应该只使用上面指定的@property

关于objective-c - 如何在多个类中使用 C 风格结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35083833/

相关文章:

c - 在 char * 上使用 printf 和 scanf

c - "On demand"服务器中全局结构的共享内存段

ios - 应用程式因服务回应而当机

ios - 仅当文件存在时才显示 cell.button

iOS 应用程序不返回到同一个 View Controller

iphone - MPMoviePlayerViewController,删除 quicktime 符号/添加背景图像?

networking - c - netmap - Tun/tap 与 netmap/pf_ring/dpdk

C OpenMP 并行冒泡排序

c - c中的函数头

c - 有什么理由不对结构进行 typedef 吗?