2 lduzywang lduzywang 于 2014.05.05 09:14 提问

objective-c关于引用计数问题

#import

@interface ViewController : UIViewController

@property(nonatomic,retain)NSString *string1;

@property(nonatomic,retain)NSString *string2;

@end

@implementation ViewController

  • (void)viewDidLoad

{

[super viewDidLoad];

NSLog(@"%d",[self.string1 retainCount]);

NSLog(@"%d",[self.string2 retainCount]);

self.string1=[NSString stringWithFormat:@"test"];

NSString *s2=[NSString stringWithFormat:@"test"];

NSLog(@"%d",[s2 retainCount]);

NSLog(@"%d",[self.string1 retainCount]);

NSLog(@"%d",[self.string2 retainCount]);

self.string2=self.string1;

NSLog(@"%d",[self.string1 retainCount]);

NSLog(@"%d",[self.string2 retainCount]);

}
小弟一直对引用计数比较晕 打印的结果分别是 0 0 1 2 0 3 3
我很纳闷为什么
NSLog(@"%d",[s2 retainCount]);
self.string1=[NSString stringWithFormat:@"test"]; 这俩个引用计数为什么是 1 2 为什么不都是1
还有最后的俩句
NSLog(@"%d",[self.string1 retainCount]);
NSLog(@"%d",[self.string2 retainCount]); 我觉得 string2引用string1 那么string1的引用计数加1 string2的引用计数为什么是3了 求大神解答 太晕了

1个回答

allinwind3344
allinwind3344   2016.05.12 10:44

self.string1=[NSString stringWithFormat:@"test"],[NSString stringWithFormat:@"test"]的retain count 是1,然后赋值self.string1,此时调用了 属性string1的set 方法,而string1定义成retain, 所以retain count会加1,变成2

Csdn user default icon
上传中...
上传图片
插入图片