Предоставляет ли retainCount правильную информацию для моего NSDate? - PullRequest
0 голосов
/ 02 июня 2011

У меня есть свойство NSDate

В .ч

...
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
...
      NSDate *pageStartDate;
...
}
...
@property (nonatomic, retain) NSDate *pageStartDate;
...

дюйм. М

...
-(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 ]

1 голос
/ 02 июня 2011

Если вы не напишите self.pageStartDate, оно не будет использовать это свойство, так что да, ожидается сохранение значения 1. Также обратите внимание, что этот экземпляр автоматически выпущен (потому что вы создали его с [NSDate date]), поэтому он будет выпущен позже.

Если вы используете свойство, вам не понадобятся операторы retain и release.

0 голосов
/ 02 июня 2011

Проблема не только в вашем 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 для проверки управления памятью, по сути, делает это неправильно.

...