什么是 - >运算符在-copyWithZone中执行:?

Joe*_*ner 1 objective-c ios

可能重复:
C 点(".")运算符中的箭头运算符( - >)用法
和箭头(" - >")运算符用于C与Objective-C

我是一个新手,看着2008年最新更新的免费软件/开源程序,我不承认->以下符号:

- (id)copyWithZone:(NSZone *)zone
{
  GFIPGeniusItem * newItem = [[[self class] allocWithZone:zone] init];
  newItem->_stringValue = [_stringValue copy];
  newItem->_imageURL = [_imageURL copy];
  newItem->_webResourceURL = [_webResourceURL copy];
  newItem->_speakableStringValue = [_speakableStringValue copy];
  newItem->_soundURL = [_soundURL copy];
  return newItem;
}
Run Code Online (Sandbox Code Playgroud)

我假设它允许某种捷径,但我特别喜欢它的功能.

Ben*_*tto 6

这是一种从该对象外部直接访问ObjC对象中的实例变量的方法.(语法和->借用于C结构,表现就好像引用是指向结构的指针).

这种访问机制在这一点上几乎是退化的,并且在现代ObjC代码中非常罕见,因为良好的封装需要使用访问器和属性,而不是直接触及实例变量.但是在一些非常特殊的情况下它是合法的,这是其中之一:

复制对象时,您希望获得与当前状态完全匹配的结果副本self.实现此目的的最简洁方法通常是明确设置副本的ivars,以防止init重载或访问器可能导致的任何副作用.它是"安全的",因为执行它的代码仍然位于有问题的类中,因此如果您需要更改或添加ivars,您可以使用其他可能需要的知识更新此代码.

在课堂外面这样做是不好的形式,并没有充分的理由去做.


归档时间:

查看次数:

612 次

最近记录:

10 年,9 月 前