我试图更深入地了解保留版本。这是我的代码,然后我将发布代码运行的输出。我不确定为什么当dealloc被称为'self'时保留计数从不为零。在dealloc被调用之前,retainCount如何不为零?
二为什么self.testNumber的保留数为2的时候我的Alloc给它的内存,我应该使用的测试号的“弱”属性,而不是
CODE:
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_testNumber = [[NSNumber alloc] initWithInt:10];
testNumber = [[NSNumber alloc] initWithInt:102];
_testInt = 105;
self.testNumber = [[NSNumber alloc] initWithInt:101];
NSLog(@"self.testNumber retain count = %d",[self.testNumber retainCount]);
NSLog(@"self.label retain count = %d",[self.label retainCount]);
self.label.text = [NSString stringWithFormat:@"%d %d %d",_testNumber.integerValue,self.testNumber.integerValue,testNumber.integerValue ];
NSLog(@"self before release retain count = %d",[self retainCount]);
[self release];
NSLog(@"self after release retain count = %d",[self retainCount]);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)dealloc {
NSLog(@"_label after before retain count = %d",[_label retainCount]);
[_label release];
NSLog(@"_label after release retain count = %d",[_label retainCount]);
[super dealloc];
}
OUTPUT :
2013-04-08 15:31:28.503 propertiesTest[5561:907] self.testNumber retain count = 2
2013-04-08 15:31:28.507 propertiesTest[5561:907] self.label retain count = 3
2013-04-08 15:31:28.509 propertiesTest[5561:907] self before release retain count = 3
2013-04-08 15:31:28.510 propertiesTest[5561:907] self after release retain count = 2
2013-04-08 15:31:28.532 propertiesTest[5561:907] _label after before retain count = 3
2013-04-08 15:31:28.534 propertiesTest[5561:907] _label after release retain count = 2
看到这个答案的理由不使用/依赖retainCount:http://stackoverflow.com/questions/6276442/why-retaincount-2-after-release – 2013-04-08 19:39:36
怎么样的一部分,其中self.testNumber = [[NSNumber alloc] initWithInt:101];这种情况下的retainCount显示2应该是正确的。但是,我应该使用'弱'来代替分配吗?它正在做一个双重保留。 – mskw 2013-04-08 19:44:31
请记住,例如,如果_label是您的视图的一部分,它将被视图保留。 – 2013-04-08 20:11:45