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

时间:2011-06-02 12:01:30

标签: ios memory properties 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,是不是?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

问题不仅仅在于您的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没有保留这个值。

试试这个

self.pageStartDate = [NSDate date];

由于您使用retain作为pageStartDate属性,因此会为您保留值。

但是 - 尝试使用retainCount检查内存管理基本上是做错了。