2011-06-02 102 views
0

我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

回答

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沒堅持價值。

由於您使用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

1

如果您不寫self.pageStartDate它不會使用該屬性,所以是,預計保留計數爲1。此外,請注意,此實例是自動發佈的(因爲您使用[NSDate date]創建了它),因此它將在稍後發佈。

如果您使用該屬性,則不需要retainrelease語句。

+0

當然,我需要財產。謝謝。 – 2011-06-02 12:36:10

相關問題