神奇的 NSString


我们都知道在OC中有很多声明 NSString的方法 ,例如直接赋值 或者stringwithString stringwithFormat 等等

今天终于知道这些方法的区别了

下面我们来看下面的代码

1. 静态的str

NSString * str = @"aaa";

这个str是字符串常量,会一直存放在静态池里面,系统不会对它启动内存管理机制,在程序销毁的时候,跟着消失。

你对它进行 retain release都不会改变它的retainCount 因为永远都是 -1(iOS 6)或者 MAX_INT。


2. stringWithFormat

NSString * testStr=[NSString stringWithFormat:@"aaa"];

testStr的retainCount 为 1

先来看看sdk中对它的解释

+ (id)stringWithFormat:(NSString *)format, ...
Description	
Returns a string created by using a given format string as a template into which the remaining argument values are substituted.
这个方法将会创建一个新的使用了特定的模板的字符串返回,系统将启用引用计数,所以此时的RC为1,并且在不用的时候由系统负责回收。


3. stringWithString

NSString * testStr=[NSString stringWithString:@"aaa"]; 这种方式的创建等同于创建了一个字符创常量  NSString * testStr = @"aaa";此时RC为-1或者无穷大,字符串常量

NSString  * testStr=[ NSString   stringWithString :[NSString stringWiithFormat: @"aaa"] ];  此时的RC为2,因为stringWithFormat的时候分配内存为1,被StringWithString引用一次变为了2.

+ (id)stringWithString:(NSString *)aString
Description	
Returns a string created by copying the characters from another given string.
stringWithString 它的retainCount取决于它后面跟的string对象。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值