gpt4 book ai didi

ios - ({}) 在objective-c中可以包装代码并返回一个对象,它是 block 还是别的?

转载 作者:行者123 更新时间:2023-12-01 18:56:56 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How is this form of scoping called? [duplicate]

(1 个回答)


7年前关闭。




我今天有一个片段,

self.tableView = ({
CGRect frame = CGRectMake(0.f, 0.f, kBPNavigationBarClockInOutAssociatesTableViewWidth,
kBPNavigationBarClockInOutAssociatesTableViewHeight);
UITableView * tableView =
[[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
tableView.autoresizingMask = (UIViewAutoresizingFlexibleTopMargin
|UIViewAutoresizingFlexibleBottomMargin
|UIViewAutoresizingFlexibleWidth);
tableView.delegate = self;
tableView.dataSource = self;

[tableView setOpaque:NO];
[tableView setScrollEnabled:YES];
[tableView setBounces:YES];
[tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[tableView setBackgroundView:nil];
[tableView setBackgroundColor:[UIColor clearColor]];

tableView;
});
  • 第一个问题:

  • ({}) 很有趣,它可以在同步模式下运行包装的代码,并在其内容的末尾返回 tableView 的对象。

    我只是假设它在这里是一个 block ,但是为什么它看起来不像:
    UITableView * (^testBlock) (void) = ^{ // Codes here... return tableView;};
    UITableView *myTableView = testBlock();
  • 第二个问题

  • 当我在 Xcode 中测试代码时, ({}) 不处于异步模式,但根据我的经验, block 总是(?这里也是 super 初级问题: block 总是以异步模式运行吗?)以异步模式运行。那么为什么它不在这里呢?
  • 第三个问题

  • 当我用返回对象搜索 block 语法时,我发现所有 block 都返回原始值,例如 BOOL 和 Double,并且没有幸运地找到返回对象的 block 。一个 block 只能返回一个原始值,这是真的吗?

    修订:

    我在
    Why doesn't this rudimentary Objective C-block code work? :
    NSString *(^print_block)() = ^{
    return @"this block worked!";
    };
    NSLog(@"%@", print_block());

    所以我认为一个 block 也可以返回一个对象类型。

    非常感谢!

    最佳答案

    我想我会让我的评论成为答案。这不是 block 。这是 GCC/LLVM 中一个有趣的编译器/代码机制的案例,称为“Statements and Declarations in Expressions”。

    它使您能够执行任意代码块并将最后一条语句作为赋值的返回值。所以在你的情况下,返回的东西是最后一行,tableview .

    就个人而言,我认为这里使用它的方式令人困惑。一个函数或只是内联编写该代码可能会更好。

    这个用例(至少我发现)通常是开发预处理器宏,这些宏执行一些带有自动变量的代码并返回它们的值,例如:

    #define pow( _x ) ({ int x = (_x); x*x; })

    一个微不足道的例子,也许不是那么好,因为我假设 _x 的值可分配给 int ,但你明白了。注意这个宏中的 _x只评估一次。

    这就是我主要看到这种语法的实用性的地方,与其他类型的宏评估相比。

    关于ios - ({}) 在objective-c中可以包装代码并返回一个对象,它是 block 还是别的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228492/

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