【问题标题】:What does inout CGPoint * mean as a parameter?inout CGPoint * 作为参数是什么意思?
【发布时间】:2013-09-22 06:42:04
【问题描述】:

在 UIScrollView 委托方法中,有:

scrollViewWillEndDragging:withVelocity:targetContentOffset:

最后一个参数是:

(inout CGPoint *)targetContentOffset

我很好奇 inout 的含义以及为什么 CGPoint 是一个指针。我尝试将 targetContentOffset 打印到控制台,但我也不知道该怎么做。任何帮助表示赞赏!

【问题讨论】:

  • 对于打印,使用*targetContentOffset 来获取它指向的东西,或者targetContentOffset->x-> 而不是.)通过指针访问结构的成员;我相信有人会就原因给出适当的实质性答案。

标签: ios objective-c uiscrollview uiscrollviewdelegate


【解决方案1】:

表示该参数用于发送数据in,也用于获取数据out

让我们看一个示例实现:

- (void)increment:(inout NSUInteger*)number {
    *number = *number + 1;
}


NSUInteger someNumber = 10;
[self increment:&someNumber];
NSLog(@"Number: %u", someNumber); //prints 11

这种模式通常用于 C 结构,例如 CGPoint,因为它们是按值传递的(复制)。

另请注意,inout 并非绝对必需,但它有助于编译器理解代码的含义并在优化时做得更好。

还有单独的 inout 注释,但据我所知,当您滥用它们时没有编译器警告,而且 Apple 似乎不再使用它们了。

【讨论】:

  • 您是否知道 in/out/inout 等记录在哪里?它们仍然存在于预处理输出中,因此它必须是编译器关键字而不是宏,但我找不到官方参考。
  • @MartinR 我也没有。可能仅用于分布式对象,请参阅stackoverflow.com/questions/5609564/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2013-07-07
  • 2018-12-24
  • 2016-10-17
  • 2015-03-05
  • 2014-05-31
相关资源
最近更新 更多