Objective-C中NSString对象的retainCount

原创 2015年11月21日 19:36:54

Objective-C中NSString对象与其他类型的对象在引用计数上存在着不小的差别。对于NSString的对象,不同的创建方式以及不同的字符个数都会影响对象的引用计数。

1)首先,当字符串的个数小于10个的时候,不管采用哪一种创建方式所得到的字符串都不存在引用计数一说


2)当字符串的长度大于等于10时,开始产生差别(stringWithString的创建方式与字面量方式是一样的)

3)将%ld占位符换成%lu后,会发现,当字符串的长度小于10个的时候,对象的引用计数是64位OS下无符号长整型的最大值


4)当字符串的长度小于10的时候,随着字符串长度的增加,地址会发生很大的变化


5)字符串长度大于10个以后,NSString对象(通过initWithFormt和stringWithFormat创建)与Objective-C中其他类型的对象是一致的,都存在堆区,引用计数会随着retain、release、copy、autorelease和alloc的使用而发生变化


6)通过initWithString、stringWithString(字面量)方式创建的NSString对象并不会随着字符串长度的增加而引起引用计数及地址的变化(地址仍然是在堆区,引用计数仍然是无符号长整型最大值)

7)对于汉字而言,通过initWithString、stringWithString(字面量)方式创建的NSString对象同英文和阿拉伯数字是一致的,没有差别;都是存储在常量区,引用计数仍然是-1(%ld作占位符输出)

8)通过initWithFormat和stringWithFormat创建的NSString汉字字符串对象是与普通对象一致的,引用计数不受汉字个数的影响,存储方式与一般对象一致


综合上述内容:

1)对于通过initWithString和stringWithString(字面量)创建的NSString对象,不管字符串的内容和长度怎么变化,该对象始终是存储在常量区的,没有引用计数一说;硬要加一个引用计数的话,那么就是无符号长整型的最大值

2)对于通过initWithFormat和stringWithFormat创建的NSString对象,如果字符串内容是汉字,那么,该对象和Objective-C中其他类型的对象是一致的;如果字符串内容是非汉字,那么,当字符串长度小于10个时,该对象存储区域在已知的五大区域之外,且随着字符串长度的变化,存储地址会有很大变化;当字符串长度超过10个以后,该对象与Objective-C中其他类型的对象一致










版权声明:欢迎转载

相关文章推荐

Objective-C Foundation框架中的NSString对象

在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutableString是可变的,和Java中的StringBuilder一样。 一、NSString对象 ...

Objective-c之NSString对象的创建(1)

//简单的定义 NSString *aString = @"NSString创建的对象"; NSLog(aString); //不需要分配内存空间和初始化 NSString *tt = [N...

Objective-C 的基本数据类型、数字、字符串和集合等介绍 (retaincount 释放问题)

http://blog.sina.com.cn/s/blog_662b417f0100s50n.html 基本类型 Objective-C中的基本类型和C语言中的基本类型一样.主要有:...

Objective-C Copy语法(一)对于Objective-C 提供的类对象NSString/NSMutableString; NSArray/NSMutableArray...

@在Objective-C 语法中,提供了Copy语法(Copy + MutableCopy)用于对象的拷贝,其中有2个含义 浅拷贝和深拷贝     // 浅拷贝:指针拷贝,不会产生新的对象。源对...

Objective-C NSString--(1)

NSString常用创建方法: 1.直接赋值:NSString *str = @"test";2.标准创建方式NSString *str = [[NSString alloc] init]; str...

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

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

iOS开发系列之Objective-C基础:NSString字符串类型(二)

iOS开发系列之Objective-C基础:NSString字符串类型(二)

Objective-C里字符串NSString过滤HTML标签的方法

//第一种,用NSScanner扫描,来自下面这个著名的链接,不过现在打不开鸟~  // Source: http://rudis.net/content/2009/01/21/flatten-h...

Objective-c 的一些基础知识,NSString,NSNumber,NSArray 等

#import int main(int argc, const char * argv[]) {     @autoreleasepool {                  //...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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