in in CGPoint*是什么意思?

c0s*_*sic 7 objective-c uiscrollview uiscrollviewdelegate ios

在UIScrollView委托方法中,有:

scrollViewWillEndDragging:withVelocity:targetContentOffset:

最后一个参数是:

(inout CGPoint *)targetContentOffset

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

Sul*_*han 23

这意味着该参数用于发送数据,in但也用于获取数据out.

我们来看一个示例实现:

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


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

此模式通常与C结构一起使用,例如,CGPoint因为它们通过值传递(复制).

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

还有单独的in和单独的out声明,但据我所知,当你滥用它们时没有编译器警告,而且似乎Apple不再使用它们了.