Все ответы здесь кажутся правильным: полноценность блокировок должна заблокировать потоки от доступа к заблокированному коду одновременно. Однако в этом поле существует много тонкости, одна из которой - то, что заблокированные блоки кода автоматически отмечены как критические регионы Общеязыковой средой выполнения.
эффект кода, отмечаемого как очень важный, состоит в том, что, если весь регион не может быть полностью выполнен, время выполнения может полагать, что Ваше целое приложение Домен потенциально подвергается опасности и, поэтому, разгрузите его из памяти. К кавычке MSDN :
, Например, рассмотрите задачу, которая пытается выделить память при содержании блокировки. Если выделение памяти перестало работать, прерывание текущей задачи не достаточно для обеспечения устойчивости AppDomain, потому что могут быть другие задачи в домене, ожидающем той же блокировки. Если текущая задача завершается, другие задачи могли бы быть заведены в тупик.
Поэтому даже при том, что Ваше приложение является однопоточным, это может быть опасностью для Вас. Полагайте, что один метод в заблокированном блоке выдает исключение, которое в конечном счете не обработано в блоке. Даже если с исключением имеют дело, поскольку оно пузырится через стек вызовов, Ваш критический регион кода обычно не заканчивался. И кто знает, как CLR будет реагировать?
Для большего количества информации, читайте эта статья об опасностях Потока. Аварийное прекращение работы () .
Вы можете проверить пустой регистр, если ваш источник данных пуст, добавьте представление заполнителя поверх табличного представления. Если они не пусты, удалите представление заполнителя.
Обычный UITableView
всегда будет отображать разделительные линии, даже если он пуст. Вы могли заметить, что если у вас есть список с одной или двумя строками, разделительные линии все еще видны. Это поведение по умолчанию, и его не следует отменять, если у вас нет действительно веской причины.
Я предполагаю, что вы видите только две разделительные линии, потому что ваши строки очень высокие?
Если вы делаете действительно необходимо удалить разделительные линии, а затем установить свойство separatorStyle
в табличном представлении на UITableViewCellSeparatorStyleNone
. Обратите внимание, что это повлияет на все строки. Поэтому, если вам все еще нужны разделители для существующих строк, вы должны нарисовать эти разделительные линии в своих собственных объектах UITableViewCell
.