在Objective-C中初始化一组结构

dre*_*kka 4 arrays struct memory-management objective-c calloc

我已经读了一段时间了,我不确定我找到了一个好的答案.

我正在尝试设置一个包含92个结构的数组.它是一个固定的长度,不会改变,因为它实际上是一个查找表.我认为最好的方法是首先分配内存,calloc然后加载数据.

但经过一些阅读后,我看到很多人直接分配内存而没有callocmalloc喜欢这样

 myStruct myData[92] = { {1,2}, {3,4}, ....};
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是动态分配内存是否更好?我的理解是这是一个更好的解决方案.特别是如果数据不一定会一直使用.

我的第二个问题是关于初始化数据.我曾经读过我可以初始化一个结构,... = {....};但编译器不接受它.

这是我到目前为止的代码:

typedef struct {
    int a;
    int b;
} myStruct;

@implementation MyClass

    static myStruct *myData;

    -(id) init {
         // ...

         myData = (myStruct *) calloc(92, sizeof(myStruct));
         myData[0] = {1,2}; // <=== Error ! Compiler says "Expected expression!"

         // ...
Run Code Online (Sandbox Code Playgroud)

gbu*_*mer 5

你的代码看起来像Objective-C,这是正确的吗?

如果您知道数组中有多少元素(并且它是一个理智的处理器和操作系统),那么显式定义它总是更简单.

无论何时动态分配数组,都需要防止出现问题,这会使代码更难理解.

如果它确实是一个查找表,并且所有值在编译时都是已知的,那么您可以初始化它:

struct {
    int a;
    int b;
} myStructDate[92] = { {1, 2}, {3, 4}, ... {181, 182}, {183, 184} };
Run Code Online (Sandbox Code Playgroud)