У меня есть объект NSDate, который я использую в основном потоке моего приложения для iPhone, и я также ссылаюсь на него из фонового потока, он определен так:
//header
NSDate *currentDate;
@property (nonatomic, retain) NSDate *currentDate;
//implementation file
@synthesize currentDate;
Затем в моем приложении я вызываю метод refreshData, который передает этот объект другому вспомогательному классу для получения данных из удаленной службы:
- (void) reloadData: (NSInvocationOperation*)operation
{
//...
NSMutableArray *results = [managerHelper refreshForAddress: address
timeFrom: fromDate
timeTo: self.currentDate];
//...
}
(обратите внимание, что вышеуказанный вызов находится в фоновом потоке)
Теперь, в этом вспомогательном классе, я добавил эти строки
- (NSMutableArray*) refreshForAddress:(NSString *)address
timeFrom:(NSDate*) fromDate
timeTo:(NSDate*) toDate
{
debugLog(@"retain count: %i", [toDate retainCount]);
NSNumber *toTimeNumber = [[NSNumber alloc] initWithDouble: [toDate timeIntervalSince1970]*1000];
debugLog(@"after retain count log");
}
Но я получаю классическую ошибку: "*** - [__ NSDate timeIntervalSince1970]: сообщение отправлено освобожденному экземпляру 0x71beea0"
И в журнале написано:
MyApp [5487: 7903] сохранить счет: 2
MyApp [5487: 7903] *** - [__ NSDate timeIntervalSince1970]: сообщение отправлено освобожденному экземпляру 0x71beea0
Итак, как вы можете видеть, последний оператор журнала не вызывается, но retainCount равен 2, как это может быть, когда я получаю эту ошибку в строке после вызова журнала ???