了解Objective-C中的实例化

fs_*_*gre 3 cocoa objective-c instantiation nsstring

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

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

ClasssName *varName = [[ClassName alloc]init];
Run Code Online (Sandbox Code Playgroud)

然后你会调用像......这样的方法

[varName someMethod];
Run Code Online (Sandbox Code Playgroud)

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

NSString *someString = @"some text here";
[someString stringByAppendingFormat:  @"some text = %d", 3];
Run Code Online (Sandbox Code Playgroud)

按照我所读到的关于类的内容,我们需要做以下的事情.

NSString *someString  =  [[NSString alloc]initWithString: @"some text here"];
[someString stringByAppendingFormat:  @"some text = %d", 3];
Run Code Online (Sandbox Code Playgroud)

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

Vik*_*ica 7

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

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

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

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


注意

[someString stringByAppendingFormat:  @"some text = %d", 3];
Run Code Online (Sandbox Code Playgroud)

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

NSString *newString = [someString stringByAppendingFormat:  @"some text = %d", 3];
Run Code Online (Sandbox Code Playgroud)


小智 5

@"Text"语法给你一个自动释放的字符串返回,它可以被看作是一个速记.

当你写作

[[NSString alloc]initWithString: @”some text here”];
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上它不是自动释放的.它永远不会解除分配,无论它收到多少发布消息. (3认同)