zoukankan      html  css  js  c++  java
  • IOS知识点总结 一 (NSString)

    objective-c中用NSString的有关注意事项:

    一:声明NSString类型的属性格式 

    //属性声明为copy,是为传入的参数若是NSMutableString类型的数据做copy处理,使外界参数的改变不影响属性的值。
    1 @property (nonatomic,copy) NSString *str;

    二:NSString创建

    //方法一 str1指针变量指向内存中 文字常量区 的 @"abc" 这个地址。
    NSString *str1=@"abc";
    
    //方法二 虽然用得是alloc方法,但并不是在内存的堆区申请内存,而是在 文字常量区 申请内存。
    NSString *str2=[[NSString alloc] initWithString:@"abc"];
    
    //方法三(方法三 和 方法一 在Xcode中被认为是等效的,如果写第三种方法,则Xcode会建议写成第一种方法)
     NSString *str3=[NSString stringWithString:@"abc"];
    
    //方法四虽没有alloc,但系统会在 堆区 申请内存,引用计数初始化为1.
     NSString *str4=[NSString stringWithFormat:@"abc"];
    
    //方法五用alloc方法,在 堆区 申请内存,引用计数初始化为1.
     NSString *str5=[[NSString alloc] initWithFormat:@"abc"];

      1.在 文字常量区 的地址分配规则:只要值相等,则共用相同的内存区域,那么str1和str2的内存地址是一样的。

      2.在 文字常量区 的字符串的 retainCount 被设置为一个非常大得数,所以对处在文字常量区的字符串变量进行 retain 或 release 操作都等同于无效,这些字符串常量在程序运行过程中一直存在,当程序结束时统一由系统回收管理。

      3.str4 和 str5都是在堆区申请内存,只要是在堆区申请的内存,就会有引用计数,两种方法初始化的retainCount都设置为1,虽然两个方法的值都是@"abc",但方法四和方法五在堆区的内存地址是不一样的,即str4和str5是堆区的两块内存区域。

    三:NSString的copy和mutableCopy机制

      1.不可变字符串的两种copy方式

    1 //源字符串
    2 NSString *str1=@"abc";
    3 
    4 //不可变复制,str2和str1都指向 常量区 的@"abc"字符串,str2等同于str1
    5 NSString *str2=[str1 copy];
    6  
    7 //可变的复制,此方法在堆区申请内存,复制str1的值。有引用计数,但str3是不可变字符串。
    8 NSString *str3=[str1 mutableCopy];

      2.可变字符串的两种copy方式

    //源字符串,创建于堆区
    NSMutableString *str1=[NSMutableString string];
    [str1 appendString:@"abc"];
    
    //不可变复制
    NSString *str2=[str1 copy];
    
    //可变的复制
    NSString *str3=[str2 mutableCopy];

      str1,str2和str3都在堆区,都有引用计数,retainCount的值为1。

      str2和str3都是不可变的字符串。

    四:NSString和c字符串的转换

      在源代码中NSString字符串是以@开头的,如:@"abc"

      在objective-c中c的字符串直接就是引号:"abc"

      1.c串 => NSString串 代码示例:

    1 //c字符串
    2 char *s="abc";
    3 
    4 //用类方法转换
    5 NSString *str=[NSString stringWithCString:s encoding:NSUTF8StringEncoding];
    6 
    7 //用初始化方法转换
    8 NSString *str1=[[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];

      两种方法转换的NSString都创建在 堆区 ,都有引用计数。

      2.NSString串 => c串 代码示例:

    //源字符串 
    NSString *str=@"abc";
    
    //方法一
    const char *s1=[str UTF8String];
    
    //方法二
    const char *s2=[str cStringUsingEncoding:NSUTF8StringEncoding];

      两种方法的返回值的设定必须是const char * 类型的。

    五:字符串和数组的转换

      1.字符串转换为数组

    //字符串
    NSString *data=@"15,13,18,9,23";
    
    //数组
    NSArray *temp=[data componentsSeparatedByString:@","];

      2.数组转换为字符串

    //数组
    NSArray *arr=@[@"1",@"2",@"3"];
    
    //字符串
    NSString *str=[arr componentsJoinedByString:@","];

    六:字符串的比较

    NSString *str1=nil;
    NSString *str2=@"this is a string";
    
    //比较时必须判断消息的接受者是否为nil
    if (str1 && [str1 compare:str2] == NSOrderSame)
    {
      NSLog(@"相等");  
    }
  • 相关阅读:
    9月7日总结
    Arbitrage题解
    杀蚂蚁题解
    8月11日总结
    8月10总结
    PHP 关于获取客户端ip的方法
    PHP内置函数大全
    PHP header函数设置http头
    获取两个日期之间的全部的日期数据(包括两个日期)
    根据周日获取这周的周日到周六的日期(周日为这周的第一天)
  • 原文地址:https://www.cnblogs.com/csdnmc/p/3952043.html
Copyright © 2011-2022 走看看