2012-02-09 91 views
1
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    _testObject = [[TestObject alloc] init]; 

    NSLog(@"_testObject rc = %d", _testObject.retainCount); 
    NSLog(@"testObject rc = %d", self.testObject.retainCount); 
} 

而且是的TestObject为什么retainCount增加?

@property (retain) TestObject *testObject; 

为什么这些NSLog() 1和2,分别的输出?属性的retainCount和底层对象是不同的?

+0

能否请您复制粘贴第二行'的NSLog(@ “的TestObject RC =%d”,self.testObject.retainCount);'几次尝试一下?你会一直得到2,还是计数增加?只是好奇...如果它升起,你有一个保留/ autorelease属性。 – dasblinkenlight 2012-02-09 14:42:29

+1

已经找到了原因,没有添加非原子。 – softempire 2012-02-09 14:47:43

+2

retainCount没用。别叫它。 – bbum 2012-02-09 16:12:59

回答

6

我猜那是因为你的财产没有被定义为nonatomic,所以你得到保留/自动释放对象。试着改变你的财产申报这样的:

@property (retain, nonatomic) TestObject *testObject; 
+0

正是这个原因,谢谢! – softempire 2012-02-09 14:46:43

+0

我没有看到的原子访问的相关性,在这里。你能解释一下吗? – Justin 2012-02-09 14:52:48

+0

啊,我现在跟着。我忘记了合成的setter的原子属性的细节。这里的[商务部](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html)。 – Justin 2012-02-09 15:01:54