【问题标题】:Understanding array pointer理解数组指针
【发布时间】:2011-09-17 18:42:53
【问题描述】:

我是 Objective-C 的新手,需要指针概念方面的帮助。我已经写了这段代码:

//myArray is of type NSMutableArray
NSString *objectFromArray = [myArray objectAtIndex:2];
[objectFromArray uppercaseString];

我假设这会更改 myArray[2] 处的字符串,因为我得到了指向它的实际指针。对取消引用指针的任何更改不应该意味着该位置的对象发生更改吗?还是这与“字符串不变性”有关?无论哪种方式,当我使用 NSLog 并遍历 myArray 时,所有字符串仍然是小写的。

【问题讨论】:

  • Ole 为您提供所需的答案。但是对于刚接触 ObjC 的人的一些额外指导,我发现将指向 ObjC 对象的指针本身视为 pointers 是不值得的。只需将它们视为“对象”,您可以使用 objc 括号表示法、点表示法等“传递”信息。如果您尝试对它们进行任何指向性的操作(如显式取消引用、指针算术等),这几乎总是错误的方式并且经常会发生坏事。
  • 感谢您的提示。之前对指针有一个非常基本的概念,但是在学习了ObjC之后,我觉得我已经忘记了一切:D
  • 老实说,这可能是最好的 ;-)

标签: objective-c ios arrays pointers nsmutablearray


【解决方案1】:

对取消引用的指针的任何更改不应该意味着该位置的对象发生更改吗?

是的,他们会的。但是,如果您阅读uppercaseString 的文档,您会发现它并没有就地修改字符串。相反,它返回原始字符串的新大写版本。 NSString 上的所有方法都是这样工作的。

您需要NSMutableString 的实例才能修改其内容。但是NSMutableString没有对应的大写方法,所以你必须自己写(作为NSMutableString上的一个类别)。

【讨论】:

    【解决方案2】:

    当然!!数组中没有字符串将被转换为大写,如语句 [objectFromArray uppercaseString];将返回未在任何对象中收集的大写字符串。 "uppercaseString" 不会修改被调用的字符串对象本身...!!

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多