我们都知道在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对象。