Objective-C基础笔记(8)Foundation经常使用类NSString

一、创建字符串的方法

void stringCreate(){
    //方法1
    NSString *str1 = @"A String!";
    //方法2
    NSString *str2 = [[[NSString alloc] init] autorelease];
    str2 = @"A String!";
    [str2 release];
    //方法3
    NSString *str3 = [[NSString alloc] initWithString:@"A String!"];
    [str3 release];
    //释放内存后 str3指向新内存
    str3 = [NSString stringWithString:@"A String!"];
    //方法4
    NSString *str4 = [[NSString alloc] initWithUTF8String:"A String!"];
    [str4 release];
    //方法5
    NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", 19, 1.55f];
    [str5 release];
    //str5指向新内存
    str5 = [NSString stringWithFormat:@"My age is %i and height is %.2", 19, 1.55f];
}
这里须要注意的是

1、在指向新内存的时候要确保原来指向的内存释放。
2、使用静态方法创建字符串对象后系统会自己主动释放内存。不要再次释放。否则会发生野指针错误。

二、读取文件内容到字符串

    //从文件读取字符串,并使用UTF-8编码
    NSError *error;
    NSString *path = @"/user/apple/Desktop/test.txt";
    NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    if(error){
        NSLog(@"读取文件失败");
    }else{
        NSLog(@"读取文件成功");
    }
这里须要注意的是传入error的时候须要传入error的地址。


如上图所看到的,假如我们如今定义了一个变量a   (int a = 123) 在内存中的结构如图。我们要改变变量a的值,就是通过找到该地址然后给该地址所指向的内存赋值。基于这个我们要获取错误信息,就须要传递error的地址。

三、读取URL内容到字符串

    NSString *str2 = [NSString stringWithContentsOfURL:@"file:///user/apple/Desktop/test.txt" encoding:NSUTF8StringEncoding error:&error];
    
    NSString *str3 = [NSString stringWithContentsOfURL:@"http://www.baidu.com" encoding:NSUTF8StringEncoding error:&error];
四、字符串导出

#pragma mark 字符串的导出
void stringExport(){
    NSError *error;
    NSString *str = @"dfdfddfdfdfd";
    NSString *path = @"/user/apple/Desktop/test.txt";
    //YES代表要进行原子性操作,也就是会创建一个中间暂时文件
    //假设文件不存在会自己主动创建
    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
    
    if (error) {
        NSLog(@"写入失败:%@", [error localizedDescription]);
    } else {
        NSLog(@"导入成功!");
    }
}
须要注意的是

1、假设写入的文件不存在则会自己主动创建

2、假设目录不存在。或者路径错误则会出错

3、atomically代表原子性。假设设为YES就会将字符串先所有写入暂时文件。最后所有写入目标文件。能够防止文件写入中断错误。


五、可变字符串

NSString和Java中的String相似,以下介绍一个NSMutableString可变长字符串

#pragma mark 可变字符串的创建
void mutableStringCreate(){
    //预先分配10个字数的存储空间
    NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
    //设置字符串内容
    [str setString:@"1234"];
    //拼接一个字符串
    [str appendString:@"567"];
    
    [str appendFormat:@"age is %i", 27];
    //替换字符串
    NSRange range = [str rangeOfString:@"age"]; //获取位置
    [str replaceCharactersInRange:range withString:@"number"];
    //插入字符串
    [str insertString:@"abc" atIndex:2]; //12abc34....
    //删除字符串
    [str deleteCharactersInRange:[range];
     
    [str release];
}
NSMutableString是NSString的子类,所以NSString的非私有方法NSMutableString都能够使用。



原文地址:https://www.cnblogs.com/gcczhongduan/p/5085834.html