3

我目前正在尝试通过阅读书籍和在线教程来学习 Objective-C,还参考了 Apple 文档,但有些东西就是不点击。我有一个关于类的问题,我使用 NSString 已经有一段时间了,并没有过多关注它的使用方式。

我的印象是,为了让某人能够使用 Objective-C 中某个类的方法,您首先需要实例化它,例如……</p>

ClasssName *varName = [[ClassName alloc]init];

然后你会调用像......

[varName someMethod];

但是看看 NSString 是如何使用的,我现在有点困惑,例如这里是我们通常如何使用它......

NSString *someString = @"some text here";
[someString stringByAppendingFormat:  @"some text = %d", 3];

按照我读过的关于类的内容,我们需要做如下的事情。

NSString *someString  =  [[NSString alloc]initWithString: @"some text here"];
[someString stringByAppendingFormat:  @"some text = %d", 3];

有人可以解释为什么某些类在使用其方法之前不需要实例化吗?

4

2 回答 2

7

Objective-C 知道一些称为literals的缩写。编译器知道特殊符号。字符串文字被编译成二进制文件并在应用程序的整个生命周期中退出。

在大多数情况下,它的行为类似于在运行时创建的对象。

  • 如果两个字面量相同,则只会创建一个对象并永远存在
  • 如果您之前创建NSString *string = [[NSString alloc] initWithString:@"My String"];@"My String"用作文字,也string可以指向它。

由于 Apple LLVM Compiler 4.0 Objective-C 知道更多文字。但与字符串文字相比,这些文字是在运行时通过方便的初始化程序创建的。


注意

[someString stringByAppendingFormat:  @"some text = %d", 3];

不会改变一些字符串。它返回一个新的字符串对象。

NSString *newString = [someString stringByAppendingFormat:  @"some text = %d", 3];
于 2013-01-07T15:19:13.073 回答
5
于 2013-01-07T15:23:31.523 回答