zoukankan      html  css  js  c++  java
  • 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都可以使用。

  • 相关阅读:
    cart树剪枝
    LSA、LDA
    paddle中新增layer
    https://www.i5seo.com/
    打印机彩色打印设置(将彩色打印为黑色)
    办公文档的标准格式
    电脑常用的5个按键
    Win7各个版本之间的区别
    win7保护眼睛的颜色设置方法(85,125,205)
    详细教您台式电脑如何组装
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468701.html
Copyright © 2011-2022 走看看