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 - 正常ですか? = 2self.pageStartDate = tempStartDateより書くと。[pageStartDate retainCount]

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];

pageStartDate プロパティに使用retainしているため、これにより値が保持されます。

しかしretainCount、メモリ管理をチェックするために使用しようとするのは、基本的に間違っています。

于 2011-06-02T12:05:37.807 に答える