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中其他类型的对象一致










版权声明:欢迎转载

iOS ARC下获取引用计数(retain count)

iOS ARC下获取引用计数(retain count)

Object 获取对象的引用计数(retain count)

MRC可以直接获取对象的引用计数,像这样 NSLog(@"%lu",obj.retainCount); ARC下引用计数由编译器自动管理,不能够直接获取,所以上面的方式不能用了。可以用下面的几种方法:...

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

http://blog.sina.com.cn/s/blog_662b417f0100s50n.html 基本类型 Objective-C中的基本类型和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中NSString的各种用法

  • 2015年03月31日 22:27
  • 17KB
  • 下载

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

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

Objective-C 【NSString 的其他常见用法】

——————————————————————————————————————————— NSString 的其他常见用法 //  NSString 长度、获取字符串中的每个字符、类型转换、去除...

在Objective-C中 NSString并不受引用计数器机制管理

对于字串如果是常量赋值,是否需要release,一直是迷迷糊糊的,另外,如果中途用常量赋值,之有的alloc是否会内存泄露,没明白。找到一篇文,写得比较清楚,也免得自已去试了。 转自:htt...

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

//第一种,用NSScanner扫描,来自下面这个著名的链接,不过现在打不开鸟~  // Source: http://rudis.net/content/2009/01/21/flatten-h...
  • nyh1006
  • nyh1006
  • 2014年07月23日 17:40
  • 3211
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Objective-C中NSString对象的retainCount
举报原因:
原因补充:

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