- NSString *s = @"test";
- NSLog(@"s:%lx",[s retainCount]);//輸出值爲0xffffffffffffffff(UINT_MAX)
- NSLog(@"s:%ld",[s retainCount]);//輸出值-1,由於0xffffffffffffffff補碼錶示的值爲-1
因爲"test"爲字符串常量,系統不會採用計數方式回收,所以不會對其作引用計數,即使我們對s如何retain或release,其值保持不變,對象也保持不變。
- NSString *s = [NSString stringWithFormat:@"%s", "test"];
- NSLog(@"s:%d",[s retainCount]); //輸出值爲1
使用stringWithFormat創建的NSString爲變量,系統會進行引用計數,和普通對象一樣。
- 情況1:NSString *s1 = [NSString stringWithString:@"test"];
- NSLog(@"s1:%d",[s1 retainCount]); // 2147483647
- 情況2:NSString *s2 = [NSString stringWithString:[NSString stringWithFormat:@"test,%d",1]];
- NSLog(@"s2:%d",[s2 retainCount]); // 2
可以看到情況1爲"常量"對象,其retainCount方法的實現返回的是maxIntValue。
- NSMutableString* myStr3 = [NSMutableString stringWithString:@"string 3"];