Object-C中关于NSString的解释

Object-C中关于NSString的解释,第1张

NSString是Object-C中Fundationg框架中封装好的专门处理字符串数据,非常重要且使用频率超高的一个基础类。

NSString的创建方式:

    NSString *firstString = @"Justin";  //第一种方式
    NSString *secondString = [NSString new]; //第二种方式
    NSString *thirdString = [NSString string];  //第三种方式
    NSString *forthString = [[NSString alloc] init];//第四种方式

NSString的恒定性:

以上第一种方式创建的字符串对象会存储在内存中的数据区,该区存储的变量和常量只在程序结束后才会被内存释放。

以上第二种到第四种方式创建的字符串对象,都会创建在内存的堆中。

无论是以何种方式创建后,再次修改:

    NSString *firstString = @"Justin";  
    firstString = @"凡人皆有一死,凡人皆需侍奉。

"

原来的字符串 @"Justin"内存空间不会替换为新的字符串值,而是在内存中新创建了一个对应字符串@"凡人皆有一死,凡人皆需侍奉。

"大小的空间存储新字符串,让firstString指向了新创建的内存地址。

系统运行机制原理:每当创建一个NSString对象时,会在当前内存区域寻找是否有相同内容的字符串存储,如果该内存区中存在相同的字符串,则不会开辟新的内存空间创建,而是将指针指向该相同字符串的内存地址。

如果系统没找到相同的字符串内容,才会新建。

另外,如果新建在数据区的字符串系统不会去堆中匹配是否有相同的字符串,数据区和堆区不会跨区查找。

NSString对象的比较:

    NSString *firstString = @"Justin";
    NSString *secondString = @"Justin";
    NSString *thirdString = [NSString stringWithFormat:@"Justin"];
    
    if (firstString == secondString) {
        NSLog(@"YES");
    }
    
    if (firstString != thirdString) {
        NSLog(@"NO");
    }

以上代码说明,仅仅用指针判断两个字符串是否相等是存在问题的,因为上面说到了,不同的NSString对象创建方式,会存在数据区和堆两个内存空间,因此,一旦涉及两个空间的NSString对象内容的比较,仅仅使用“==”是有风险的。

应使用以下方式:

     if([firstString isEqualToString:thirdString]){
         NSLog(@"YES");
     }

NSString对象的拼接方法:

    NSString *firstString = @"Justin";
    NSString *secondString = @"Justin";
    NSString *thirdString = [NSString stringWithFormat:@"%@%@",firstString,secondString];

NSString对象的长度获取方法:

    NSString *firstString = @"Justin";
    NSUInteger length = firstString.length;

NSString对象和C语言Char类型的转换:

    //NSString->char

    NSString *firstString = @"Justin";
    char * myChar = firstString.UTF8String;

    //chart->NSString

    NSString *secondString = [NSString stringWithUTF8String:myChar];

NSString读网络地址内容

    //Get text from URL
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    NSString *str1 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding         error:nil];

NSString写入本地文件

    NSString *text = @"Justin!";
    NSString *locoalPath = @"/Users/Justin/Desktop/abc.txt";
    NSError *error;
    BOOL resoult= [text writeToFile:locoalPath atomically:NO encoding:NSUTF8StringEncoding error:&error];
    
    if (error){
        NSLog(@"%@",error.localizedFailureReason);
    }else{
        NSLog(@"%d",resoult);
    }

NSString读取本地文件

    NSString *locoalPath = @"/Users/Justin/Desktop/abc.txt";
    NSError *error;
    
    NSString *text =[NSString stringWithContentsOfFile:locoalPath encoding:NSUTF8StringEncoding error:&error];

NSString对象比较(大小,长度...)

返回类型是枚举类型:使用时可以具体查看

options:也是枚举类型,制定根据什么条件比较两个字符串,使用时可以根据需求定义。

    NSString *firstString = @"Justin";
    NSString *thirdString = @"swear you can";

    //NSComparisonResult:ENUM type
    //NSNumericSearch:ENUM type
    NSComparisonResult result = [firstString compare:thirdString options:NSNumericSearch];

NSString判断是否以某字符串开头或结尾:

    NSString *thirdString = @"swear you can";
    //判断是否以swear开头
    BOOL start = [firstString hasPrefix:@"swear"];
    //判断是否以can结尾
    BOOL end = [firstString hasPrefix:@"can"];

NSString判断是否包含某字符串和某字符串长度:

    NSString *thirdString = @"swear you can";
    NSRange rang = [thirdString rangeOfString:@"you"];
    NSLog(@"length=%lu,location=%lu",(unsigned long)rang.length,(unsigned long)rang.location);

当为找到时会返回NSNotFound.

NSString把字母转换为大写:

string = [string uppercaseString];

NSString还有很多很多其它使用方法和功能,在使用过程中大家都可以根据经验去查找系统提供的更多功能以实现不同的需求。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存