Objective C: BOOL по сравнению с bool

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

Вы должны добавить еще много потоков, которые обращаются к этому объекту, чтобы проверить производительность.

И вы можете просто посчитать время между завершением и началом операций, чтобы измерить производительность (например, Long startTime = System.nanoTime ();).

Прочтите здесь, чтобы узнать, как проверить, закончился ли поток, чтобы можно было измерить время выполнения: Как узнать, закончили ли другие потоки?


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

очень простой пример согласно вашему существующий класс:

class Number {

    private int value;

    public Number(int value) {
        this.value = value;
    }

    public synchronized int getValue() {
        return value;
    }

    public synchronized int changeData(int change) {
        value = change;
        return value;
    }
}

188
задан Arslan Ali 4 March 2015 в 04:50
поделиться

4 ответа

Из определения в objc.h:

#if (TARGET_OS_IPHONE && __LP64__)  ||  TARGET_OS_WATCH
typedef bool BOOL;
#else
typedef signed char BOOL; 
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" 
// even if -funsigned-char is used.
#endif

#define YES ((BOOL)1)
#define NO  ((BOOL)0)

Так, да, можно предположить, что BOOL является символом. Можно использовать (C99) bool тип, но все платформы Objective C Apple и большая часть кода Objective-C/Cocoa используют BOOL, таким образом, Вы сохраните себя головная боль, если определение типа когда-нибудь будет изменяться, просто используя BOOL.

195
ответ дан Cœur 23 November 2019 в 05:43
поделиться

Тип Objective C, который необходимо использовать, BOOL. Нет ничего как собственный булев тип данных, поэтому чтобы быть уверенным, что код компилирует на всем использовании компиляторов BOOL. (Это определяется в Платформах Apple.

8
ответ дан Georg Schölly 23 November 2019 в 05:43
поделиться

Да, BOOL является определением типа для символа со знаком согласно objc.h.

я не знаю о bool, все же. Это - вещь C++, правильно? Если это определяется как символ со знаком, где 1 ДА/ВЕРНЫЙ, и 0 НЕТ/ЛОЖЬ, то я предполагаю, что это не имеет значения, какой Вы используете.

, Так как BOOL является частью Objective C, тем не менее, вероятно, имеет больше смысла использовать BOOL для ясности (другие разработчики Objective C могли бы быть озадачены, если они видят bool используемое).

5
ответ дан Jeff 23 November 2019 в 05:43
поделиться

Я иду против условностей. Мне не нравится typedef для базовых типов. Я считаю, что это бесполезное косвенное обращение, убирающее ценность.

  1. Когда я увижу базовый тип в вашем источнике, я сразу это пойму. Если это typedef, мне нужно поискать его, чтобы понять, с чем я действительно имею дело.
  2. При переносе на другой компилятор или добавлении другой библиотеки их набор определений типов может конфликтовать и вызывать проблемы, которые трудно отлаживать. Фактически, я только что разобрался с этим. В одной библиотеке логическое значение было присвоено типу int, а в mingw / gcc - типу char.
1
ответ дан 23 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

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