gpt4 book ai didi

objective-c - 任何人都可以在一行中创建 block 和复制时解释这种异常情况吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:31 24 4
gpt4 key购买 nike

void(^block)()  = ^() {double a=0;
}; //works

void(^block)() = ^() {double a=0;
}.copy //won't works;

void(^block)() = (^() {double a=0;
}).copy //this one surprisingly works actually

void(^block)() = ^() {double a=0;
};
block=block.copy //works but 2 lines

这个问题是出于单纯的好奇

结果

void(^block)()  = (^() {double a=0;
}).copy works.

奇怪

block=block.copy 不起作用,但 block=[block copy] 起作用。我想知道为什么

我只是想定义一个 block 并立即复制它。像这样的东西:

NSArray * array = [NSArray array].copy;

看,那里不需要括号。

array=array.copy 也可以正常工作。

最佳答案

我认为混淆确实源于在不应该使用的地方使用点符号。

void(^block)() = ^ {double a=0;}.copy // does not work

这不会编译,因为 .copy 被解释为访问该名称的结构字段。因此 Xcode 编译错误:“成员引用基类型……不是结构或联合”。 (编辑代码片段间距以证明这一点。)

现在考虑括号中的备选方案:

void(^block)() = (^{double a=0;}).copy //this one surprisingly works actually

当您认为编译器现在理解了您的意图时,这会起作用也就不足为奇了——多亏了括号。

关于objective-c - 任何人都可以在一行中创建 block 和复制时解释这种异常情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160698/

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