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

         


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

相关文章推荐

【Objective-C】OC中字符串(NSString)的基本概念和常用处理方法

在Foundation框架中,提供了NNString类,用于处理字符串对象。在C语言中字符串在一对引号中表示。 OC是C语言的一种延展,换句话说,OC语言是建立在C语言的基础之上(C的基础之上添加了...

【Objective-C】OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)

一:字典的基本概念     Foundation中的字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合.正如,我们在字典里查找单词的定义一样. 通过...

【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)

平时使用中,我们通常需要通过对自定义对象进行归档处理,自定义对象要进行归档,需要去实现NSCoding协议. NSCoding协议有两个方法,encodeWithCoder方法对对象的属性数据做编码...

【Objective-C】OC中集合基本概念和常用方法(NSSet)

一:集合的基本概念    Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素是无序,同一个对象只能保存一个, 并且它也分为可变和不可变的集合对象(可变集...

【Objective-C】OC中自动释放池的基本概念和使用方法

自动释放池的基本概念      cocoa中有一个自动释放池(Autorelease Pool)的概念,顾名思义,它是可以存放一些实体的 集合,在这个自动释放池中的对象,是能够被自动释放的。NSO...

推挽输出、开漏输出、OC、OD、线或、线与、竞争、冒险、毛刺【基本概念,常看看】

推挽输出与开漏输出的区别 推挽输出:可以输出高,低电平,连接数字器件; 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相...

黑马程序员--OC的基本概念 类和对象的创建方式

objective-c OC全称 就是面向对象的意思 它是在c语言的基础上增加了一层小的面向对象的原 完全兼容c 可以在oc代码中混入c语言代码,甚至c++代码 oc所有关键字以@开头 比如@...

OC视频笔记-引用计数和对象所有权的基本概念

1.引用计数和对象所有权的基本概念 cocoa中的内存管理机制——引用计数 【alloc+1】+【retain+1】+【release+1】+【release+1】 Co...

黑马程序员---OC学习笔记之block的基本概念

------Java培训、Android培训、iOS培训、.Net培训-------- 一、block的基本概念 1)block对象是一个C级别的语法和运行机制,它与标准的C函数类似,不同之处在于,它...

OC基本概念

oc总结 –oc基础语法相关知识 m是OC源文件扩展名,入口点也是main函数,第一个OC程序:import //Student.h #import @interface Student : NS...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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