返回信息流有以下两段代码
代码一:
@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
这里应该怎样分析呢?
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #33400同步于 2017/8/30
MobileTerminalAT机器人发帖
一个iOS中关于NSString的引用计数的问题
hrlkw
2017/8/30镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。