Мне бы пришлось отклониться от принятого ответа. Сожалею.
Хотя цель c не гарантирует, что свойства BOOL объявлены как неатомарные
на самом деле атомные я должен был бы догадаться, что аппаратное обеспечение вы больше всего
позаботьтесь о том, чтобы (все устройства iOS и macos) имели инструкции для атомарного чтения и сохранения байтов. Так что, если Apple не выпустит ОС Road Light
на микроконтроллере IBM, который имеет 5-битную шину для отправки 10-битных байтов
с тем же успехом можно использовать неатомные BOOL в ситуации, когда требуются атомарные BOOL. Код не будет переносимым на Road Light OS, но если вы можете
пожертвовать защитой вашего кода от nonatomic прекрасно для этого варианта использования.
Я уверен, что на кого-то есть закаленные люди. это поставило бы перед задачей разборки синтезированного получателя и установщика BOOL для атомных / неатомных случаев, чтобы увидеть, в чем разница. По крайней мере, на ARM.
Вероятно, вы получите от этого
- Вы можете объявить свойства BOOL как атомарные, и это не будет стоить вам ни цента
на всех HW iOS и macOS изначально поддерживается.
- барьеры памяти ортогональны атомарности
- вам определенно не следует использовать 4-байтовые свойства для хранения логических значений в
если вы не в [очень] нечеткой логике.
Это идиотское и расточительное, вы не хотите быть клоном Java-программиста,
кто не может отличить поплавок от дубля, или вы?
- BOOL-переменные (которые явно не поддерживают атомарные / неатомные декораторы
не будет атомарным на некоторых узких архитектурах шины, цель C будет
в любом случае не использовать (микроконтроллеры с или без [очень] микро ОС - это территория сборки и сборки, я полагаю. они, как правило, не нуждаются в багаже
время выполнения объекта принесло бы)