Creating strings 创建字符串

之前我们介绍了一种创建方法:

NSString *foo = @"Hello, world!";

除此之外,你也可以用以下几种方法来创建字符串。

比如下面的这段代码中,就使用了「样式符」,用法就和在 NSLog() 一样。

NSInteger number = 42;
NSString *output = [NSString stringWithFormat:@"You picked %ld",
(long)number];
NSLog(@"%@", output);

上面这段代码也可以用 alloc/init 方法实现:

NSString *output = [[NSString alloc] initWithFormat:@"You picked
%ld", (long)number];

存在上面两种不同写法,是有历史原因的。在2011年之前,因为当时内存管理的方式和现在不一样,这两行代码代表的也是不同的意思。2011年, Xcode 引入了自动引用计数(ARC)技术。而在此之前,程序员需要手动分配和释放内存。如果忘记释放内存的话,就可能会造成内存泄漏。在 Swift 中,默认选用了 ARC ,所以你可能从来没有担心过这个问题。

尽管在过去的几年里,包括我在内的部分程序员,对 ARC 还是抱着不欢迎的态度,但 Objective-C 程序几乎不可能避开它。也就是说,如果你真的想知道 stringWithFormat 和 initWithFormat 这两者之间的区别,那么你可以去看一看这本书最后关于 ARC 的那个章节。

你可以像这下面这段代码一样,从一个文件里载入字符串:

NSString *output = [[NSString alloc]
initWithContentsOfFile:@"hello.txt" usedEncoding:nil error:nil];

如果你能够在脑内完成苹果自动将 Swift 转成 Objective-C 的工作,这会对你的工作大有裨益,当你看到 "initWith" 的时候,就去掉它;当你看到 "error" 的时候,就把它看成一个可以抛出错误信息的函数调用。所以这里的 "initWithContentsOfFile:usedEncoding:error" 就变成了可以抛出错误信息的 "contentsOfFile:usedEncoding: "。

我在这里发送的错误信息是空(nil),因为现在我还不想处理任何错误信息。这样做其实是不好的。但是如果要处理错误信息的话,就必须有指针相关的知识,所以具体处理错误,这一块我们将稍后再讨论。

results matching ""

    No results matching ""