NSString的构造方法(包括读取文件和URL的内容)

本文探讨了Objective-C中NSString类的构造方法,特别是如何利用这些方法从文件和URL读取内容。通过学习,作者对OC语言的构造方式有了更深入的理解,尽管它在严谨性上不如Java,但其轻巧性让作者逐渐产生喜爱。
摘要由CSDN通过智能技术生成

今天学习了NSString类的常用构造方法,更加深入理解了OC语言风格。

一般来说,OC的构造方法风格是这样的:

1. 通过类静态方法alloc分配内存,再调用以init打头的构造函数来初始化类实例对象。

2. 通过类静态方法直接实例化对象,其静态方法名字通常是类名首字母变小写(去掉前缀先~)。这种方式的内部实现当然是靠1完成,而且这种方法一般都自动释放。

慢慢开始喜欢上OC这个语言了,虽在严谨性上比不上Java,但是比Java轻巧很多。

//
//  main.m
//  NSString
//
//  Created by zzqiltw on 14-5-26.
//  Copyright (c) 2014年 zzqiltw. All rights reserved.
//

#import <Foundation/Foundation.h>

#pragma mark NSString的init创建
void createStringByInit() {
    
    // 常量创建,不需要释放
    NSString *str1 = @"Hello!";
    
    // 其他:
    NSString *str2 = [[NSString alloc] init];
    str2 = @"Hello!";
    
    NSString *str3 = [[NSString alloc] initWithString:str2];
    
    // C风格字符串(const char*)转OC字符串:
    //注意没有@
    NSString *str4 = [[NSString alloc] initWithUTF8String:"Hello!"];
    
    NSString *str5 = [[NSString alloc] initWithFormat:@"My name is %@", @"zzq" ];
    
    NSLog(@"%@%@%@%@%@", str1, str2, str3, str4, str5);
    
}

#pragma mark NSString的静态方法创建
void createStringByStaticMethod() {
    NSString *str1 = @"Hello!";
    
    NSString *str3 = [NSString stringWithString:str1];
    
    NSString *str4 = [NSString stringWithUTF8String:"Hello!"];
    
    NSString *str5 = [NSString stringWithFormat:@"My name is %@", @"zzq" ];

    NSLog(@"%@%@%@%@", str1, str3, str4, str5);
}

#pragma mark NSString读取文件内容
void createStringFromFile() {
    NSString *filename = @"/Users/zzqiltw/Desktop/test.txt";
    // 如果读取文件失败,在Java中会抛出异常
    // 在OC中也可以用@try@catch@finally来捕获异常,但是这个例子里有更方便的做法是使用NSError
    
    NSError *error;
    // 将error作为参数传进去,如果有错误(如文件找不到)则会给error赋值,如果没有错误则error是nil。
    // 想通过函数改变变量的值,必须把地址传进去
    NSString *fileContent =
        [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:&error];
    if (error == nil) {
        NSLog(@"读取文件成功,内容为:\n%@", fileContent);
    } else {
        NSLog(@"读取文件失败,错误为:\n%@", [error localizedDescription]);
    }
}

#pragma mark NSString打开URL
void createStringFromURL() {
    // 本例中的error处理方法同上,这里不再重复
    
    // 1. 用URL打开一个文件:
    // 这里的fileURL开头有三个/,前两个和file://连在一起的,表示schema。第三个/是表示文件路径的一部分
    NSURL *fileURL = [NSURL URLWithString:@"file:///Users/zzqiltw/Desktop/test.txt"];
    NSString *fileContent = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@", fileContent);
    
    //2. 用URL打开一个网址:
    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
    NSString *urlContent = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@", urlContent);
    
}

#pragma mark NSString从一个文件中读入String再写入另外一个文件中
void writeString2File() {
    NSString *fromFilename = @"/Users/zzqiltw/Desktop/test.txt";
    // 输出文件如果不存在的话会自动创建,但是目录不存在就不会了,而且会报错。
    NSString *toFilename = @"//Users/zzqiltw/Desktop/test2.txt";
    
    NSString *content =
        [NSString stringWithContentsOfFile:fromFilename encoding:NSUTF8StringEncoding error:nil];
    
    /*
     YES表示原子性。即
     字符串先一点一点地写入一个临时文件中,等字符串全部写完了,再把临时文件剪切到目标文件中。
     如果文件写入过程中出错了,则把临时文件删掉,而不写到目标文件中并且报错。(推荐使用)
     */
    [content writeToFile:toFilename atomically:YES encoding:NSUTF8StringEncoding error:nil];

}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
//      createStringByInit();
//      createStringFromFile();
//      createStringFromURL();
        writeString2File();
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值