了解Objective-C中的实例化

时间:2013-01-07 15:13:44

标签: objective-c cocoa nsstring instantiation

我目前正在尝试通过阅读书籍和在线教程来学习Objective-C,同时参考Apple文档,但有些事情只是不点击。我有关于类的问题,我一直在使用NSString一段时间而没有太多关注如何使用它。

我的印象是,为了让某人能够使用Objective-C中某个类的方法,你首先需要实例化它,比如......

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];

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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


请注意

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

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

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

答案 1 :(得分:5)

@"Text"语法为您提供了一个自动释放的字符串,它可以被认为是一种速记。

当你写

[[NSString alloc]initWithString: @”some text here”];

您在概念上使用@”some text here”创建一个自动释放的字符串,然后使用initWithString创建一个保留的新字符串。