我有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 :(得分:1)
如果你不写self.pageStartDate
它不会使用该属性,所以是的,保留计数为1。另请注意,此实例是自动释放的(因为您使用[NSDate date]创建它),因此它将在稍后发布。
如果您使用的是该属性,则不需要retain
和release
语句。
答案 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
检查内存管理基本上是做错了。