OC字符串的基本概念

原创 2016年01月05日 19:02:15

1.通过字符串常量创建多个字符串对象,如果常量内容一样的话,那么多个对象指向同一块存储空间,如果内容不一样则会开辟不同的空间,并且是在常量区开辟空间。

        NSString *str1 =@"abc";

        NSString *str2 = @"abc";

        NSLog(@"str1=%p str2=%p", str1, str2);

        

2.通过alloc init创建,只要调用alloc就会在堆内存中开辟一块存储空间.

 但是我们通过地址会发现str3str4却指向了同一块存储空间,这是因为不同平台或者不同编译器的存储的方式不一样,

 Mac平台,str3str4内容一样则会指向同一块空间,而如果在IOS平台,内容一致也会开辟两块存储空间

        NSString *str3 = [[NSStringalloc]initWithFormat:@"abc"];

        NSString *str4 = [[NSStringalloc]initWithFormat:@"abc"];

        NSLog(@"str3=%p str4=%p",str3,str4);

        

3.通过类工厂方法创建(stringWithFormat,内部其实就是封装了alloc init

        NSString *str5 = [NSStringstringWithFormat:@"asd"];

        NSString *str6 = [NSStringstringWithFormat:@"asd"];

        NSLog(@"str5=%p str6=%p",str5,str6);

       

         注意:一般情况下,只要是通过alloc或者通过类工厂方法创建,每次都会在堆内存中开辟一块新的内存空间。

        但是如果是通过allocinitWithString方法则除外,因为这个方法时通过copy返回一个字符串对象给我们。

        copy又分为深copy和浅copy,如果是深拷贝会创建一个新的对象,如果是浅拷贝不会创建一个新的对象,

        而是直接返回被拷贝的对象的地址给我们。

        initWithString正好是浅拷贝,所以无论是在什么平台,什么编译器,都是指向同一块存储空间。

        

        NSString *str7 = [[NSStringalloc]initWithString:@"asd"];

        NSString *str8 = [[NSStringalloc]initWithString:@"asd"];

        NSString *s = [NSStringstringWithString:@"asd"];

        NSLog(@"str7=%p str8=%p s=%p",str7,str8,s);//这里的地址显示是一样的

        

initWithFormatstringWithFormat的区别:

        1initWithFormat是实例方法

        只能通过 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"]调用,但是必须手动release来释放内存资源

        2stringWithFormat是类方法

        可以直接用 NSString* str = [NSString stringWithFormat:@"%@",@"Hello World"]调用,内存管理上是autorelease的,不用手动显式release


initWithStringstringWithString的异同点:

         stringWithString是类方法,返回一个auto-released的指向NSString的指针,所以不需要手工释放(自动释放池会释放它)。

         initWithString是实例方法,返回一个指向NSString的指针,同时该对象的retain

         count1,所以需要手工release,否则内存泄露。

         

         相同点:都可以创建一个新的NSString

         


版权声明:本文为博主原创文章,未经博主允许不得转载。

oc 字符串截取

/* //从0位置开始截取 截取3个字符     NSString *string1 = @"This is a string";     if(string1.length>3)     {...
  • weibingbing_net
  • weibingbing_net
  • 2015年06月16日 15:01
  • 4998

OC 字符串操作

/--------操作字符串--NSString(静态字符串)---------------------     NSString *Beijing= @"北京欢迎您";        //字符...
  • zhaopenghhhhhh
  • zhaopenghhhhhh
  • 2013年11月19日 18:40
  • 14574

OC中字符串和数值的方法与使用实例解析

OC中字符串有两种,一种是不可变字符串(NSString),一种是可变字符串(NSMutableString),不可变字符串中的内容不允许被改变,而可变字符串中的内容允许被改变。 不可变字符串NS...
  • zhoushiweiCSDN
  • zhoushiweiCSDN
  • 2016年03月22日 20:33
  • 600

OC中的字符串常用方法

OC中的字符串常用方法 OC中对字符串进行操作使用了Foundation框架中的NSString类(不可变)、NSMutableString类(可变)。 NSString 1、创建字符串 [objc]...
  • wanghy_ios
  • wanghy_ios
  • 2015年08月22日 15:42
  • 1435

OC字符串去除首字母,OC字符串去除-号

NSMutableString *test = [NSMutableString stringWithString:@"-1221212"];                  if([...
  • wy13661429802
  • wy13661429802
  • 2016年05月18日 19:52
  • 248

OC中的字符串属性(深拷贝和浅拷贝)

我们在项目中定义一个字符串属性的时候,有时候见到别人用retain,有时候见到用copy。那么到底这两种用法有什么区别呢? 这就需要我们了解深拷贝和浅拷贝和区别了。 其实copy是创建一个新对象,...
  • qq_29892943
  • qq_29892943
  • 2016年03月05日 14:08
  • 755

OC基础—结构体、字符串

OC基础—结构体、字符串
  • ly307637627
  • ly307637627
  • 2014年04月27日 15:11
  • 1154

OC中关于字符串的操作

比较的时候,从字符串左边开始,一次比较每个字符,直接出现差异、或者其中一个串结束为止。 比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比...
  • Jia_Heng_he
  • Jia_Heng_he
  • 2016年12月01日 08:42
  • 310

OC-042.数组与字符串之间的转换

1.字符串转数组 NSString *str = @"tom,jack,lucy"; //1.通过字符串来分割原来的字符串来组成一个数组 component:组成 Separate...
  • longpapa
  • longpapa
  • 2015年12月14日 15:54
  • 209

OC中获取一串字符串的高度(宽度确定)或宽度(高度确定)

项目中我们有时会需要根据字符串来确定UILabel的宽度或高度,如我们经常遇到的单元格自适应问题。如果是要动态知道UILabel的高度,那么我们直接利用单元格自适应高度就可以。如果我们要获取UILab...
  • u010105969
  • u010105969
  • 2016年10月26日 19:49
  • 936
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC字符串的基本概念
举报原因:
原因补充:

(最多只允许输入30个字)