Фильтр и понимания списка хорошо для Вашего примера, но у них есть несколько проблем:
Ваше исходное решение на самом деле более эффективно для очень больших списков, даже если мы можем согласиться, что это более ужасно. Но если Вы волнуетесь, что у Вас могут быть несколько 'John Smith', это может быть зафиксировано путем удаления на основе положения а не на значении:
names = ['Jones', 'Vai', 'Smith', 'Perez', 'Smith']
toremove = []
for pos, name in enumerate(names):
if name[-5:] == 'Smith':
toremove.append(pos)
for pos in sorted(toremove, reverse=True):
del(names[pos])
print names
Мы не можем выбрать решение, не рассматривая размера списка, но для больших списков я предпочел бы Ваше решение с 2 передачами вместо фильтра или перечисляю понимания
Это дает вам текущую дату и время:
NSDate *now = [NSDate date];
Это будет настолько надежно, насколько вы можете получить. Внутренние часы iPhone будут обновлены, когда он получит доступ к серверу NTP. Если телефон использует GPS в качестве источника синхронизации времени, он также будет использоваться для обновления тех же общесистемных часов, которые доступны с помощью вышеуказанного метода.
Эквивалент CoreFoundation выглядит примерно так:
CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
Что возвращает эквивалент CoreFoundation стандартной временной метки UNIX «секунды с эпохи».
Даже если вы можете получить время от GPS, вы должны знать, что GPS время не совсем совпадает с UTC. Однако об этом может позаботиться GPS-приемник в iPhone.