gpt4 book ai didi

ios - 很多关于 NSString 引用计数的问题

转载 作者:行者123 更新时间:2023-11-28 18:52:40 24 4
gpt4 key购买 nike

我有一些关于 Objective-C 中的 Mannul 引用计数的测试。我在下面运行这些代码:

- (void) test {
NSData *a1 = [[NSData alloc] init];
NSLog(@"NSData: %lu", [a1 retainCount]);

NSMutableData *a2 = [[NSMutableData alloc] init];
NSLog(@"NSMutableData: %lu", [a2 retainCount]);

NSObject *a3 = [[NSObject alloc] init];
NSLog(@"NSObject: %lu", [a3 retainCount]);

NSString *b1 = [[NSString alloc] initWithFormat: @"%@", @"ok"];
NSLog(@"NSString: %lu", [b1 retainCount]);


NSString *b2 = [[NSString alloc] initWithFormat: @"%@", a3];
NSLog(@"NSStinrg: %lu", [b2 retainCount]);


NSString *a = @"abc";
NSString *b = @"abc";
NSLog(@"%p", a);
NSLog(@"%p", b);

}

控制台:

2016-06-23 16:15:50.490 text[38147:3406036] NSData: 18446744073709551615
2016-06-23 16:15:50.491 text[38147:3406036] NSMutableData: 1
2016-06-23 16:15:50.491 text[38147:3406036] NSObject: 1
2016-06-23 16:15:50.491 text[38147:3406036] NSString: 18446744073709551615
2016-06-23 16:15:50.491 text[38147:3406036] NSStinrg: 1
2016-06-23 16:15:50.491 text[38147:3406036] 0x10359d160
2016-06-23 16:15:50.491 text[38147:3406036] 0x10359d160

我想知道为什么 NSDataNSString 的引用计数是 UINT_MAX(-1),而 initWithFormat 会让 b2 添加一个计数?为什么ab的地址相同?

非常感谢。

最佳答案

空的不可变 NSData 对单个实例是唯一的,不能保留或释放(由 UINT_MAX-1 refcount 指示)。对于NSString,%@被对象调用-description的结果代替,NSString的-description方法返回self。所以你在那里得到一个常量 NSString 文字,这同样不是可以保留或释放的东西。常量字符串也是唯一的,因此在编译时只有一个嵌入到您的二进制文件中,并且不进行任何分配。

关于ios - 很多关于 NSString 引用计数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37985945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com