【问题标题】:iOS, What does this notation ({ ...something in it... }) mean for?iOS,这个符号({ ...something in it...})是什么意思?
【发布时间】:2015-07-28 13:24:53
【问题描述】:

我是一名新的 iOS 开发人员。

今天,我遇到了一个 ({}) 符号。

问题

这是什么意思?
为什么我需要这个?
我可以不使用它吗?

请看下面的代码:

@property (strong, nonatomic) UITableView *myTableView;

 _myTableView = ({
    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];

    tableView;
});

据我所知,块是这样的

int (^myBock)(int) = ^(int num) { return num* value;}

那么这里的 ({}) 是什么意思?我认为它与上面的模式不匹配。

【问题讨论】:

  • “2题是2题”的哪一部分你不明白?
  • @AshishKakkad 如果我这样使用,会发生什么?
  • @musefan 我不明白为什么我可以将像 ({}) 这样的东西传递给 UITableView 变量
  • 不是我的意思。我的意思是,如果您有 2 个问题,那么您应该将它们作为 2 个单独的问题发布在 Stack Overflow 上。不要创建 1 个问题来将所有问题组合在一起
  • 很抱歉。下次我会把它们分开,但这里的问题 2 已经回答了。我能做些什么来解决它?

标签: ios objective-c ios7


【解决方案1】:

第一季度。 当某些方法/函数接受块并且您想传递使用的空块时 ({}) ,当然 nil 也可以工作,但并非总是如此,如果采用块参数的函数/方法没有检查它之前不是 nil执行它,应用程序将崩溃,某些方法(如 uiviewanimation)正在检查您是否提供了一个块而不是 nil,然后才执行块,但正如我所说,并非所有功能/方法(第 3 方)都会检查。

第二季度。 如果你直接在一个块中使用 self ,这个块将保留“self”对象,这意味着即使“self”不再被使用也需要被释放(例如它是一个 UIViewController 并且你关闭了它),它仍然与块一起保留,并且在该块被执行或自行释放之前不会允许它释放/释放

您可以通过https://www.youtube.com/watch?v=aS6PBmBAP1g了解更多信息

【讨论】:

  • 真的非常感谢您的问题2,但是对于问题1,为什么我可以将Block传递给UITableView?
  • 因为它像 object 一样被“包裹”,就像“id”一样
  • 那么传递给 UITableView 的是 ({}) 中的 tableView 吗?我真的很好奇为什么我们需要这种代码风格。我们可以 _myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];会有什么不同吗?
  • 我不明白你的问题,这只是一个代码块,它不会返回tableView,请看youtube.com/watch?v=aS6PBmBAP1g
  • 我已经观看了 youtube 视频,但是如果这里 ({ ... }) 传递给 _maTableView 是一个块,那么 ^ 符号在哪里?我可以定义一个没有“^”的块吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 2016-10-10
  • 1970-01-01
相关资源
最近更新 更多