• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - C 样式 2D 数组作为 ivar

[复制链接]
菜鸟教程小白 发表于 2022-12-13 08:04:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在 C 中,我们可以执行以下操作来创建二维数组:

int intArray[10][10];

在 C99 中,我们可以创建一个 VLA:

size_t col = 10;
size_t row = 10;

int array[row][col];

在 Objective-C 的方法中,我可以创建一个包含 id 的二维数组,如下所示:

id genObjectArray[10][10];

是否可以在 Objective-C 中创建二维数组 ivar?

以下是我尝试过的:

@interface myClass ()
{
    id objArray[][]; 
    //This doesn't work, unless I specific size.
    //I want to do this, so that I could specific the size later during 
    //runtime
}

在 C 中,我可以执行以下操作并稍后在 block 范围内为二维数组分配空间:

int **array;
int *elements;

我也可以在 Objective-C 中做同样的事情,但是当我使用 id 或其他对象类型时会出现问题;换句话说,以下内容无效:

id **array;
id *elements;

因此,我的问题是,是否可以将 C 样式的 2D 数组声明为包含 ids 的 ivar?

我知道我们可以使用普通的 NS(Mutable)Array;但这仅用于教育目的。



Best Answer-推荐答案


你不能这样做。对于 C99 VLA,数组所需的空间在数组声明时分配。对于 ivar,执行此操作的类似时间是分配和初始化对象时,但 Objective C 中不支持执行此操作。您需要对对象构造函数的功能有更严格的定义(更像 Java 的构造函数,而不是 Objective C 的初始化程序)。

你能得到的最接近的应该是这样的:

@interface myClass () {
    id * objArray;
}

-(instancetype)initWithRowsize_t)row colsize_t)col {
    self = [super init];
    if (self) {
        objArray = calloc(row * col * sizeof(id));
    }
    return self;
}

-(void)dealloc {
    free(objArray);
}

在这种情况下,您将 ivar 声明为指针并自己管理存储(以及多维数组的步幅)。

显然,NSArray 在所有可能的方面都更好。

关于ios - C 样式 2D 数组作为 ivar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836634/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap