retainCount是否为我提供了我的NSDate的正确信息?

问题描述:

我NSDate的财产retainCount是否为我提供了我的NSDate的正确信息?

在.H

... 
@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 
... 
     NSDate *pageStartDate; 
... 
} 
... 
@property (nonatomic, retain) NSDate *pageStartDate; 
... 

在.M

... 
-(void)myMethod 
{ 
    ... 
    // set date of start showing page 
    NSDate *tempStartDate = [NSDate date]; 
    [tempStartDate retain]; 
    pageStartDate = tempStartDate; 
    [tempStartDate release]; 
    ... 
} 
... 

运行该代码的[tempStartDate retainCount] = 1之后 - 是正常的吗? 如果我写self.pageStartDate = tempStartDate[pageStartDate retainCount] = 2.

是否有正确使用NSDate或不是?

+0

如果你写@syncronize pageStartDate;这意味着保留计数1是正常的 – 2011-06-02 12:04:49

+0

对不起,什么是@synchronize? – Krishnabhadra 2011-06-02 12:06:40

+0

我写了@synchronize,当然。我需要属性'pageStartDate',但是当我使用'self.pageStarDate'时,这个retainCount增加到2。 – 2011-06-02 12:45:08

的问题不只是你NSDate它,因为你使用retainCount

译注:

NSDate *tempStartDate = [NSDate date]; // No alloc, retain, copy, or mutableCopy - so assume autoreleased instance 
[tempStartDate retain]; // You call retain - you own this now 
pageStartDate = tempStartDate; // Not going through the setter. :(
[tempStartDate release]; // You've released this correctly, except for the step above. 
          // pageStartDate is now pointing to a garbage pointer. 

你释放你保留什么做了正确的事情,但pageStartDate没坚持价值。

由于您使用retain为pageStartDate财产试试这个

self.pageStartDate = [NSDate date]; 

,这将保留对您的价值。

但是 - 试图使用retainCount来检查你的内存管理,基本上是做错了。

+0

self.pageStartDate = [NSDate date]; - 有用。谢谢。 – 2011-06-02 12:37:50

+0

在这种情况下,接受我的回答和/或upvoting是对SO感谢某人的常用方式。 – Abizern 2011-06-02 12:39:01

+0

但我想到这个:'self.pageStartDate = [NSDate date];我的日志看到[pageStartDate retainCount] = 2' - 这是正常的吗?因为我在我的代码中有一个'pageStarDate'释放' - 在' - (void)dealloc' – 2011-06-02 12:39:43

如果您不写self.pageStartDate它不会使用该属性,所以是,预计保留计数为1。此外,请注意,此实例是自动发布的(因为您使用[NSDate date]创建了它),因此它将在稍后发布。

如果您使用该属性,则不需要retainrelease语句。

+0

当然,我需要财产。谢谢。 – 2011-06-02 12:36:10