Как я приношу DRY (не повторяйте себя) к Objective C

Нет, это не. Используйте Секундомер System.Diagnostics)

Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();

Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);

, Секундомер автоматически проверяет на существование таймеров высокой точности.

стоит упомянуть, что DateTime.Now часто вполне немного медленнее, чем DateTime.UtcNow из-за работы, которая должна быть сделана с часовыми поясами, DST и такой.

DateTime. UtcNow обычно имеет разрешение 15  мс. См. сообщение в блоге John Chapman [приблизительно 114] точность для большой сводки.

Интересные мелочи: секундомер возвращается DateTime.UtcNow, если Ваши аппаратные средства не поддерживают высокочастотный счетчик. Можно проверить, чтобы видеть, использует ли Секундомер аппаратные средства для достижения высокой точности путем рассмотрения статического полевого Секундомера. IsHighResolution.

5
задан Quinn Taylor 31 July 2009 в 22:12
поделиться

5 ответов

Это обычная проблема и для C ++ (дублирование объявлений, хотя, по общему признанию, это немного другое). Короткий ответ: так устроен язык. На самом деле это не идет вразрез с DRY, поскольку каждое утверждение уникально и имеет собственное назначение. Однако по сегодняшним меркам это, по общему признанию, очень многословно.

6
ответ дан 13 December 2019 в 22:13
поделиться

Поскольку вы упомянули, что вы новичок в Objective-C, я хочу убедиться, что вы знаете, что вам не нужно создавать свойства для каждой переменной экземпляра в ваших классах, и на самом деле вы, вероятно, не должны.

Свойства представляют интерфейс, который ваш класс предоставляет другим классам. Этот интерфейс не обязательно соответствует внутренней реализации класса. В тех случаях, когда они одинаковы, синтаксис объявленных свойств позволяет (относительно) просто выразить это.

Если ваши классы раскрывают большую часть своего внутреннего состояния через свойства, вы можете поближе взглянуть на их дизайн , и можете ли вы получить более простой дизайн, перенеся обязанности.

1
ответ дан 13 December 2019 в 22:13
поделиться

Objective-C - это очень тонкий слой поверх C. На низком уровне большая часть «Objective» компилируется до указателей кода, которые вводятся в процесс компиляции C.

Они сделали это. добавить подсчет ссылок (самая простая система сборки мусора), но из-за ее природы все это делается вручную, отсюда и вызовы «Release».

0
ответ дан 13 December 2019 в 22:13
поделиться

Да, я делаю, но я надеюсь, что каждый день кто-нибудь будет приходить со сценарием или чем-то еще для XCode, чтобы автоматизировать это. (Я также предпочитаю

self.foo = nil 

в своих сделках)

0
ответ дан 13 December 2019 в 22:13
поделиться

Вы сможете обойти необходимость объявлять и переменную экземпляра, и свойство, когда 32-разрядные компьютеры забыты, поскольку 64-разрядная среда выполнения может синтезировать переменные экземпляра. Но вы не можете быть полностью СУХИМ на языке, где вещи должны быть объявлены в файле заголовка и реализованы в другом. Язык требует дублирования. Единственный способ обойти это - создать метаязык.

Вы можете использовать сценарии, чтобы исключить дублирование набора одного и того же шаблона переменной снова и снова, но он все равно будет присутствовать в коде.

Кстати, Я не думаю, что оператор @synthesize дублирует информацию.

0
ответ дан 13 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: