0

我有 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 的使用是否正确?

4

2 回答 2

1

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

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

于 2011-06-02T12:14:41.127 回答
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检查你的内存管理基本上是做错了。

于 2011-06-02T12:05:37.807 回答