我目前正在尝试通过阅读书籍和在线教程来学习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];
有人可以解释为什么某些类在使用其方法之前不需要实例化吗?
答案 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
创建一个保留的新字符串。