gpt4 book ai didi

ios - 访问 block 内的 C block 数组

转载 作者:可可西里 更新时间:2023-11-01 06:13:11 27 4
gpt4 key购买 nike

我有一个这样定义的 C block 数组:

void (^block1)() = ^void() {
doSomething1();
doSomething2();
};

void (^block2)() = ^void() {
doSomething3();
doSomething4();
};

// etc.
typedef void (^myBlockType)();
myBlockType arrayBlock[2];
arrayBlock[0] = block1;
arrayBlock[1] = block2;

但是我试图从一个 block 中访问那个 C 数组,比如

void (^adjust)(int value) = ^void(int value) {
myBlockType myBlock = arrayBlock[value];
};

Xcode 正在提示

Cannot refer to declaration with an array type inside block

如果这是一个由 float 、整数等组成的数组,则有 this solution但是如何为 C 数组的 block 执行此操作?

我可以吗

    myBlockType array = calloc(2, sizeof(myBlockType));

?这是正确的方法吗?在那种情况下,我该如何初始化这些值?

最佳答案

好吧,评论后有一些提示,但你需要学习和理解这里发生的事情

Can I do

myBlockType array = calloc(2, sizeof(myBlockType));
  • 在 C 数组中,指针是密切相关的。在 C 数组 T x[n] 中,名称 x 的类型为 T * - 指针。索引操作 x[n] 定义为与 *(x + n) 相同,使用指针操作 (* & +)。因此,您可以将数组视为指针,将指针视为数组,例如你可以“索引”一个指针。
  • 正如您所发现的,您无法在 block 中捕获本地数组变量。
  • 可以捕获一个指针值变量,但是您有责任确保指向的内容仍然有效。
  • 你的calloc想法是一种可能的解决方案,但是类型错误,array需要声明为指针。
  • 此外,如果您正在使用 ARC(很有可能)并存储可保留对象类型的指针,例如对对象或 block 的引用,则 array 的类型必须包含一个所有权限定符。您可能应该使用 __strong 以便您的“数组”拥有它引用的项目,就像 NSArray 一样。
  • 对于您calloc(或malloc )的任何事情,您有责任在何时何地调用free必填。

了解这些要点,您可能的解决方案(不止一个)就会落空。

HTH

关于ios - 访问 block 内的 C block 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353558/

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