Я работаю над программой Objective-C, где я получаю битовые поля по сети, и мне нужно установить логические переменные на основе этих битов.
В настоящее время я представляю битовые поля как int
, а затем использую битовое смещение, подобное этому (все свойства self являются BOOL):
typedef enum {
deleteFlagIndex = 0,
uploadFlagIndex = 1,
moveFlagIndex = 2,
renameFlagIndex = 3
} PrivilegeFlagIndex;
int userFlag = 5; //for example
// this would be YES
self.delete = ((userFlag & (1 << deleteFlagIndex)) == (1 << deleteFlagIndex));
// this would be NO
self.upload = ((userFlag & (1 << uploadFlagIndex)) == (1 << uploadFlagIndex));
И это работает (насколько мне известно), но я задаюсь вопросом - есть ли более эффективный краткий способ кодировать все биты, используя причудливый трюк / хак? Я спрашиваю, потому что я буду делать это для много флагов (более 30).
Я понял, что мог бы также использовать этот метод:
self.move = ((userFlag & (1 << moveFlagIndex)) > 0)
... что уменьшает количество набираемых текстов, но я не знаю, есть ли веская причина не делать это таким образом.
Редактировать: Пересмотрено, чтобы сказать кратким, а не эффективным - я не беспокоился о производительности выполнения, а скорее советы и лучшие практики для того, чтобы сделать это умным способом.