首页 > 试题广场 >

下面的代码段,第一个str的retainCount是多少?第

[单选题]
下面的代码段,第一个str的retainCount是多少?第二个和第三个呢?
=======================================================
NSMutableArray* ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"];
[strretain];
[aryaddObject:str];
NSLog(@"%@%d",str,[str retainCount]);
[strretain];
[strrelease];
[strrelease];
NSLog(@"%@%d",str,[str retainCount]);
[aryremoveAllObjects];
NSLog(@"%@%d",str,[str retainCount]);
=======================================================
  • 321
  • 210
  • 432
  • 320
======================================================= 
NSMutableArray* ary = [[NSMutableArray array] retain];     
NSString *str = [NSString stringWithFormat:@"test"];     // str retainCount:1
[strretain]; / / str retainCount:2
[aryaddObject:str];  / / str retainCount:3,因为str引用的对象在ary内部又多了一份引用
NSLog(@"%@%d",str,[str retainCount]); 
[strretain];  / / str retainCount:4
[strrelease];  / / str retainCount:3
[strrelease];  / / str retainCount:2
NSLog(@"%@%d",str,[str retainCount]); 
[aryremoveAllObjects];  / / str retainCount:1
NSLog(@"%@%d",str,[str retainCount]); 
=======================================================
PS:楼上编译优化效果?不懂求解
发表于 2017-04-05 19:01:05 回复(0)
蒙了一个A🤔
发表于 2021-02-24 19:01:00 回复(0)
// 编译器优化之前
NSString *str = [NSString stringWithFormat:@"test"]; // 此时retainCount = 1
[str retain]; // 此时retainCount = 2, 每次retain时都会+1
[ary addObject:str]; // retainCount = 3, 因为被数组ary强引用了,被其他对象引用时都会+1
[str release]; // retainCount = 2; 每次release时都会-1,直到0为止
[arr removeAllObjects]; // retainCount = 1; arr释放对str的引用后,retainCount会-1

// 编译器优化之后
retainCount = -1; 
// 因为"test"太短了,被优化为一个NSTaggedPointerString对象,retain/release不起作用了

发表于 2022-10-23 10:08:45 回复(1)
没人会啊?
发表于 2021-03-08 18:55:05 回复(0)
我是不是学了个假Java,仿佛在看阿亚帕涅科语
发表于 2021-03-07 22:30:02 回复(0)
一脸懵逼🤣
发表于 2021-02-22 19:12:00 回复(0)
京东为什么考的度是安卓和ios***
发表于 2018-02-18 13:36:05 回复(0)
我全是蒙的。。。
发表于 2017-04-06 15:04:52 回复(0)
这是啥出题人。。。。编译优化后输出结果肯定和答案不同

发表于 2017-03-07 15:00:29 回复(0)
IOS难道就没人解答一下么
发表于 2017-02-25 11:04:08 回复(0)