Для чего IDisposable?

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

Если вам нужно, чтобы в центре экрана находился загрузочный счетчик, а все остальное скрывалось, вам нужно добавить вид вокруг него:

{
       isLoading && (
<View style={{width: '100%', height: '100%', alignItems: 'center', justifyContent: 'center'}}>         
<ActivityIndicator
           style={{ height: 80 }}
           color="#C00"
           size="large"
         />
</View>
       )
     }
19
задан bluish 22 November 2012 в 15:14
поделиться

5 ответов

Сборка "мусора" для памяти. Необходимо избавиться от нересурсов памяти - дескрипторы файлов, сокеты, GDI + дескрипторы, соединения с базой данных и т.д. Это обычно, что лежит в основе IDisposable тип, хотя фактический дескриптор может быть настоящим длинным путем вниз цепочка ссылок. Например, Вы могли бы Dispose XmlWriter, который располагает StreamWriter, это имеет ссылку на, который располагает FileStream , это имеет ссылку на, который выпускает сам дескриптор файла.

48
ответ дан 30 November 2019 в 02:10
поделиться

Расширение немного на других комментариях:

Расположение () метод нужно назвать на всех объектах, которые имеют ссылки на неуправляемые ресурсы. Примеры такого включали бы потоки файла, соединения с базой данных и т.д. Основное правило, что работы большую часть времени: "если объект.NET реализует IDisposable тогда, необходимо звонить, Располагают (), когда Вы сделаны с объектом.

Однако некоторые другие вещи иметь в виду:

  • Вызов располагает, не дает Вам контроль, когда объект на самом деле уничтожается, и память освобождена. Дескрипторы GC, что для нас и делает это лучше, чем, мы можем.
  • Располагают, очищает все собственные ресурсы, полностью вниз стопка базовых классов, как Jon указал. Тогда это называет SuppressFinalize (), чтобы указать, что объект готов быть исправленным, и никакая дальнейшая работа не необходима. Следующий запуск GC очистит его.
  • , Если Располагают, не назван, то GC находит объект как бывший должный быть очищенным, но Завершить, должен быть назван первым, чтобы удостовериться, что средства высвобождены, тот запрос на Завершают, стоится в очереди и шаги GC, таким образом, отсутствие вызова для Расположения вынуждает еще один GC работать, прежде чем объект сможет быть убран. Это заставляет объект способствоваться следующему "поколению" GC. Это не может казаться, что грандиозное предприятие, но в памяти оказало давление на приложение, продвижение объектов до более высоких поколений GC может продвинуть приложение верхней памяти по стене к тому, чтобы быть приложением из памяти.
  • не реализуют IDisposable в Ваших собственных объектах, если Вы абсолютно не должны. Плохо реализованные или ненужные реализации могут на самом деле сделать вещи хуже вместо лучше. Некоторое хорошее руководство может быть найдено здесь:

    Реализация Расположить Метод

    Или читают что целый раздел MSDN на Сборке "мусора"

8
ответ дан 30 November 2019 в 02:10
поделиться

Для использования ключевого слова использования, объект должен реализовать IDisposable. http://msdn.microsoft.com/en-us/library/yh598w02 (По сравнению с 71) .aspx

1
ответ дан 30 November 2019 в 02:10
поделиться

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

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

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

ресурсы В качестве примера, которые Вы захотите очистить, сразу: дескрипторы базы данных, дескрипторы файлов, сетевые дескрипторы.

1
ответ дан 30 November 2019 в 02:10
поделиться

Поскольку Объекты когда-то содержат ресурсы около памяти. GC освобождает память; IDisposable так, можно выпустить что-либо еще.

5
ответ дан 30 November 2019 в 02:10
поделиться
Другие вопросы по тегам:

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