Нет никакого определенного языком значения - это - просто конвенция, которую некоторые люди используют для различения переменных экземпляра от локальных переменных. Другие изменения включают m_foo (и s_foo или g_foo или статические переменные) или mFoo; альтернативно некоторым людям нравится снабжать префиксом локальные переменные (и параметры) вместо переменных экземпляра.
Лично я не использую префиксы как это, но это - выбор стиля. Пока все работающие над тем же проектом последовательны, это обычно - не большая часть проблемы. Я видел приблизительно ужасно непоследовательный код хотя...
NSDateComponents кажется мне лучшим выбором. Еще одна тактика, которую стоит попробовать, - это бесплатное соединение с CFDate, затем использование CFDateGetAbsoluteTime и вычитание, чтобы получить количество времени между двумя датами. Однако вам придется проделать некоторые дополнительные вычисления, чтобы выяснить, совпадают ли даты из-за разницы во времени в один и тот же день.
Я использую NSDateComponents, чтобы выделить временной аспект, а затем сравнить. Что-то вроде:
if ([[self beginningOfDay:date1] isEqualToDate:[self beginningOfDay:date2]])
{
...
}
- (NSDate *)beginningOfDay:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comp = [calendar components:unitFlags fromDate:date];
return [calendar dateFromComponents:comp];
}
Если вы ориентируетесь на iOS 8 (и OS X 10.9) или более позднюю версию , то Ответ Джо является лучшим решением с использованием нового метода в NSCalendar. только для этой цели:
-[NSCalendar isDate:inSameDayAsDate:]
Для iOS 7 или более ранней версии : NSDateComponents - мое предпочтение. Как насчет чего-то вроде этого:
- (BOOL)isSameDayWithDate1:(NSDate*)date1 date2:(NSDate*)date2 {
NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];
NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];
return [comp1 day] == [comp2 day] &&
[comp1 month] == [comp2 month] &&
[comp1 year] == [comp2 year];
}
(Note: Look at Joe's answer for a good way to do this on iOS 8+)
I just use a date formatter:
NSDateFormatter *dateComparisonFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateComparisonFormatter setDateFormat:@"yyyy-MM-dd"];
if( [[dateComparisonFormatter stringFromDate:firstDate] isEqualToString:[dateComparisonFormatter stringFromDate:secondDate]] ) {
…
}
HTH.