BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #33400同步于 2017/8/30
MobileTerminalAT机器人发帖

一个iOS中关于NSString的引用计数的问题

hrlkw
2017/8/30镜像同步0 回复
有以下两段代码 代码一: @interface ViewController () @property (nonatomic, copy) NSString *test1; @property (nonatomic, copy) NSString *test2; @end @implementation ViewController - (void)viewDidLoad { NSString *str1 = @"str1"; NSLog(@"%@====%ld", str1, [str1 retainCount]); NSString *str2 = [NSString stringWithFormat:@"str2"]; NSLog(@"%@====%ld",str2,[str2 retainCount]); NSString *str3 = [[NSString alloc] initWithFormat:@"str3"]; NSLog(@"%@====%ld",str3,[str3 retainCount]); NSLog(@"%@====%ld", self.test1, [self.test1 retainCount]); self.test1 = [[NSString alloc] initWithFormat:@"test1"]; NSLog(@"%@====%ld", self.test1, [self.test1 retainCount]); self.test2 = @"test2"; NSLog(@"%@====%ld", self.test2, [self.test2 retainCount]); } 输出:2017-08-30 23:07:35.171 StringCountTest[26556:15626825] str1====-1 2017-08-30 23:07:35.171 StringCountTest[26556:15626825] str2====-1 2017-08-30 23:07:35.171 StringCountTest[26556:15626825] str3====-1 2017-08-30 23:07:35.171 StringCountTest[26556:15626825] (null)====0 2017-08-30 23:07:35.171 StringCountTest[26556:15626825] test1====-1 2017-08-30 23:07:35.171 StringCountTest[26556:15626825] test2====-1 代码二: @interface ViewController () @property (nonatomic, copy) NSString *test1; @property (nonatomic, copy) NSString *test2; @end @implementation ViewController - (void)viewDidLoad { NSString *str1 = @"str1"; NSLog(@"%@====%ld", str1, [str1 retainCount]); NSString *str2 = [NSString stringWithFormat:@"str2"]; NSLog(@"%@====%ld",str2,[str2 retainCount]); NSString *str3 = [[NSString alloc] initWithFormat:@"str3"]; NSLog(@"%@====%ld",str3,[str3 retainCount]); NSLog(@"%@====%ld", self.test1, [self.test1 retainCount]); self.test1 = [[NSString alloc] initWithFormat:@"this is test1"]; NSLog(@"%@====%ld", self.test1, [self.test1 retainCount]); self.test2 = @"test2"; NSLog(@"%@====%ld", self.test2, [self.test2 retainCount]); } 输出: 2017-08-30 23:06:12.368 StringCountTest[26445:15621637] str1====-1 2017-08-30 23:06:12.368 StringCountTest[26445:15621637] str2====-1 2017-08-30 23:06:12.368 StringCountTest[26445:15621637] str3====-1 2017-08-30 23:06:12.368 StringCountTest[26445:15621637] (null)====0 2017-08-30 23:06:12.370 StringCountTest[26445:15621637] this is test1====2 2017-08-30 23:06:12.370 StringCountTest[26445:15621637] test2====-1 这里str1,str2,str3 的引用计数为-1的原因我的理解是这里都是作为字符串常量处理了 第一段代码中self.test1赋值为"test1"后,引用计数是-1 但在第二段代码中self.test1赋值为"this is test1"后,引用计数是2 这里应该怎样分析呢?
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。