Образец заявления о выдаче дубликата исполнительного листа по алиментам: Дубликат судебного приказа о взыскании алиментов: выдача после утери

Содержание

Заявление о выдаче дубликата исполнительного листа образец бланк (бланк, образец

Итак, вы выиграли дело в суде, ваши права признали, и ответчик должен выполнить вашу волю.

 

Для этого вам выдали исполнительный лист, который, по сути, является гарантией его выполнения, так как организация, которая контролирует его исполнение – служба судебных приставов, к сожалению, не принимает никакие копии, даже если они подписаны нотариусом, им нужен оригинал.

 

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

 

Это, конечно, не самая лучшая ситуация, но из нее, разумеется, есть выход – сделать дубликат этого самого исполнительного листа.

 

 

Как это сделать?

 

Для этого вам надо обратиться в тот суд, в котором вы разрешали спор и получали решение, по которому вам и выдали исполнительный лист. Суд рассмотрит заново ситуацию, взвесит все ваши аргументы и примет решение. Если все обстоятельства будут указывать на то, что исполнительный лист действительно утерян, то будет принято решение о том, чтобы вам выдали дубликат исполнительного листа, который по силе, разумеется, будет соответствовать первоначальному экземпляру.

 

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

 

 

Как писать заявление?

 

Заявление о выдаче дубликата исполнительного листа оформляется письменно двумя способами: либо от руки, либо в электронном виде и потом распечатывается.

 

В заявлении обязательно должны быть следующие сведения:

  1. Название суда, в который вы его пишите.

  2. Ваши данные (фамилия, имя, отчество, где живете и где прописаны) и данные о человеке или организации, на которую выписан исполнительный лист. Если это человек, то также необходимы фамилия, имя, отчество, адрес прописки и адрес места, где живет человек, если речь идет об организации – то ее название, адрес, номер ИНН, ЕГРЮЛ.

  3. Данные о том решении, по которому вам выдали исполнительный лист, то есть номер дела, где и когда рассматривалось и ситуация, из-за которой исполнительный лист был потерян. Причем, чем более подобно вы ее опишете, тем лучше.

  4. Само требование, чтобы вам выдали дубликат взамен утерянного исполнительного листа. Тут наоборот, как можно более официальным языком, кратко и лаконично.

  5. Список тех документов, на которые вы ссылаетесь, чтобы доказать, что исполнительный лист вы потеряли. Тут тоже много не бывает, чем больше найдете – тем лучше.

  6. Дата, когда вы подаете заявление, ваша подпись с расшифровкой.

Ниже расположен типовой бланк и образец заявления о выдаче дубликата исполнительного листа вариант которого можно скачать бесплатно.

 

что делать и как восстановить

Когда бывшие супруги не приходят к согласию относительно содержания общих детей, вопрос по алиментам решается судом. В этом случае денежные перечисления производятся принудительно. Если утерян исполнительный лист по алиментам, платежи на содержание ребенка прекращаются. Документ гарантирует материальное обеспечение детей, поэтому стоит знать, можно ли восстановить ИЛ и какие действия для этого потребуются.

Если у вас возникнут вопросы, можете бесплатно проконсультироваться в чате с юристом внизу экрана или позвонить по телефону 8 (800) 333-05-49 Бесплатный звонок для всей России.

Что такое исполнительный лист по алиментам?

Исполнительный лист по алиментам содержит решение суда. Входит в список исполнительных документов – оснований для взыскания денежных средств с ответчика. Выдается в единственном экземпляре. Исключение – ситуация, когда ответчик официально трудится в нескольких местах. В таком случае оригиналы направляются в каждое – копия ИЛ не имеет законной силы (ч. 1 ст.429 ГПК РФ).

Исполнительный лист выдается получателю алиментов либо направляется по месту работы ответчика как основание, по которому из заработной платы удерживается определенная судом часть. Ответственность за исполнение судебного решения лежит на работодателе.

Если плательщик официально не трудоустроен, истец передает оригинал исполнительного листа в территориальное отделение ФССП, написав ходатайство об инициировании исполнительного производства (ч. 1 ст. 30 № 229-ФЗ).

Важно! По заявлению взыскателя секретарь суда направляет исполнительный лист судебным приставам-исполнителям.

Чем грозит потеря?

Как любой документ, исполнительный лист может потеряться – на работе ответчика либо в ФССП. Исполнительный лист – основание для выплаты алиментов, поэтому его потеря приведет к приостановлению денежных выплат.

Это возможно, если ответчик:

  • поменяет работу – новому работодателю нужно основание для удержания части заработной платы;
  • уволится – для начала ИП приставами требуется оригинал.

Пройдите опрос и юрист бесплатно поделится планом действий по алиментам в вашем случае

Порядок восстановления

Исходя из

Заявление о выдаче дубликата исполнительного листа

Исполнительный лист — документ, который выдает суд на основании вступившего в законную силу решения. Он направлен на принудительное исполнение действий ответчиком либо другим лицом, участником судебного процесса.

Если исполнительный лист утерян либо пришел в негодность, то можно подать в суд заявление о выдаче дубликата.

Как подать заявление о выдаче дубликата

Заявление направляется в тот же суд, который первоначально выдал документ. Его может подать взыскатель, его представитель, правопреемник и наследник.

В тексте следует указать наименование суда, участников спора и обстоятельства, которые привели к утере либо утрате. Если есть доказательства, то нужно их приложить к обращению (справка из полиции о краже, МЧС о пожаре и т. д.).

Платить госпошлину не требуется. В зависимости от того, куда подается заявление, понадобится:

  • в арбитражное ведомство представить почтовую квитанцию о направлении копии ответчику и другим лицам, которые участвуют в деле;
  • в районный суд либо мировому судье приложить экземпляры для участников процесса.

О сроках подачи заявления

Временные рамки, в течение которых взыскатель может обратиться за осуществлением действий, указанных в листе, отражены в ст. 21 ФЗ «Об исполнительном производстве» и составляют:

  • 3 года с момента вступления в силу судебного акта;
  • 1 год по решениям о перемещении незаконно ввезенного в РФ ребенка;
  • 3 месяца по листам, у которых восстановлен срок для предъявления исполнителям;
  • по делам об административных правонарушениях — в течение 2 лет.

Если в утрате документа на взыскание виновен судебный пристав либо другое лицо, осуществляющее аналогичные функции, то истец вправе обратиться с требованием о выдаче дубликата в течение одного месяца, как ему стало об этом известно.

Порядок рассмотрения заявления

Заявление о выдаче дубликата исполнительного листа рассматривают на заседании с участием всех сторон спора. О предстоящем процессе лица должны быть уведомлены, но неявка не является основанием для отложения. Дело должно быть рассмотрено и по нему вынесено соответствующее определение в течение 10 дней с того дня, как судебная канцелярия получила материалы.

В ходе разбирательства заявитель-взыскатель обязан обосновать свои доводы и доказать, что истребуемый документ утерян либо утрачен. Определение можно обжаловать в апелляционном порядке.

Как осуществляется выдача дубликата

Дубликат может быть выдан на руки взыскателю либо направлен ему по почте. Новый документ должен в точности повторять и совпадать с тем, который существовал ранее, только на нем должна быть надпись «дубликат».

Заявление о выдаче дубликата исполнительного листа

]]>

Подборка наиболее важных документов по запросу Заявление о выдаче дубликата исполнительного листа (нормативно–правовые акты, формы, статьи, консультации экспертов и многое другое).

Формы документов: Заявление о выдаче дубликата исполнительного листа

Судебная практика: Заявление о выдаче дубликата исполнительного листа

Открыть документ в вашей системе КонсультантПлюс:
Подборка судебных решений за 2019 год: Статья 432 «Перерыв и восстановление срока предъявления исполнительного документа к исполнению» ГПК РФ
(ООО юридическая фирма «ЮРИНФОРМ ВМ»)Руководствуясь статьей 432 ГПК РФ и установив, что согласно справке РОСП УФССП исполнительный лист утрачен в процессе почтовой пересылки; с заявлением о выдаче дубликата исполнительного листа взыскатель обратился в суд через шесть лет после окончания исполнительного производства; после отказа в выдаче дубликата в 2019 году обратился в суд с настоящим заявлением, суд правомерно отказал в восстановлении пропущенного срока для предъявления исполнительного листа к исполнению и выдаче дубликата исполнительного листа, обоснованно исходя из того, что взыскатель получил исполнительный лист по истечении более трех лет с момента вступления решения суда в законную силу и окончания исполнительного производства в отношении должника, при этом при надлежащей степени внимательности и предусмотрительности имел возможность своевременно обратиться в суд за получением исполнительного документа или его дубликата.
Открыть документ в вашей системе КонсультантПлюс:

Подборка судебных решений за 2019 год: Статья 22 «Перерыв срока предъявления исполнительного документа к исполнению» Федерального закона от 02.10.2007 N 229-ФЗ «Об исполнительном производстве»
(В.Н. Трофимов)По мнению суда, сославшегося на ч. 1 ст. 21, ч. 1 и 2 ст. 22 ФЗ «Об исполнительном производстве», ч. 1 и 2 ст. 430 ГПК РФ, из приведенных правовых норм следует, что при рассмотрении заявления о выдаче дубликата исполнительного листа суд должен установить факт его утраты, выяснить причины такой утраты, проверить, не истек ли срок, установленный для предъявления исполнительного листа к исполнению, не был ли уже исполнен судебный акт, на основании которого выдавался исполнительный лист.

Статьи, комментарии, ответы на вопросы: Заявление о выдаче дубликата исполнительного листа

Открыть документ в вашей системе КонсультантПлюс:

«Комментарий к Арбитражному процессуальному кодексу Российской Федерации»
(постатейный)
(4-е издание, исправленное и переработанное)
(под ред. В.В. Яркова)
(«Статут», 2020)2. Рассмотрение заявления о выдаче дубликата исполнительного листа производится в судебном заседании в порядке, указанном в ч. 3 ст. 323 АПК. В случае удовлетворения заявления на основе определения о выдаче дубликата выдается соответствующий документ, в верхнем правом углу которого указывается: «Дубликат». Дубликат имеет такую же юридическую силу, как и первоначальный исполнительный лист. Копия исполнительного листа, в том числе и удостоверенная нотариально, не имеет такой юридической силы, поскольку правовые последствия для исполнительного производства порождает только предъявление к взысканию либо подлинника исполнительного листа, либо его дубликата.

Нормативные акты: Заявление о выдаче дубликата исполнительного листа

«Арбитражный процессуальный кодекс Российской Федерации» от 24.07.2002 N 95-ФЗ
(ред. от 08.06.2020)2. Заявление о выдаче дубликата исполнительного листа может быть подано до истечения срока, установленного для предъявления исполнительного листа к исполнению, за исключением случаев, если исполнительный лист был утрачен судебным приставом — исполнителем или другим осуществляющим исполнение лицом и взыскателю стало об этом известно после истечения срока, установленного для предъявления исполнительного листа к исполнению. В этих случаях заявление о выдаче дубликата исполнительного листа может быть подано в течение месяца со дня, когда взыскателю стало известно об утрате исполнительного листа. «Гражданский процессуальный кодекс Российской Федерации» от 14.11.2002 N 138-ФЗ
(ред. от 31.07.2020)2. Заявление о выдаче дубликата исполнительного документа может быть подано в суд до истечения срока, установленного для предъявления исполнительного документа к исполнению, за исключением случаев, если исполнительный документ был утрачен судебным приставом-исполнителем или другим осуществляющим исполнение лицом и взыскателю стало об этом известно после истечения срока, установленного для предъявления исполнительного документа к исполнению. В этих случаях заявление о выдаче дубликата исполнительного документа может быть подано в суд в течение месяца со дня, когда взыскателю стало известно об утрате исполнительного документа.

Как написать тестовые случаи: образец шаблона с примерами

  • Home
  • Testing

      • Back
      • Agile Testing
      • BugZilla
      • Cucumber
      • Database Testing
      • ETL Testing
      • ETL
      • Назад
      • JUnit
      • LoadRunner
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Почтальон
      • QTP
      • Назад
      • Центр качества SAP
      • SoapUI
      • Управление тестированием
      • TestLink
  • SAP

      • Назад
      • 900 03 ABAP
      • APO
      • Новичок
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • Crystal Reports
      • Заработная плата
      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Безопасность
      • Менеджер решений
      • Successfactors
      • SAP Back Tutorials
      • 9007
          • Apache
          • AngularJS
          • ASP.Net
          • C
          • C #
          • C ++
          • CodeIgniter
          • СУБД
          • JavaScript
          • Назад
          • Java
          • JSP
          • Kotlin
          • Linux
          • Linux
          • Kotlin
          • Linux
          • js
          • Perl
          • Назад
          • PHP
          • PL / SQL
          • PostgreSQL
          • Python
          • ReactJS
          • Ruby & Rails
          • Scala
          • SQL
          • 000
          • SQL
          • 000 0003 SQL 000 0003 SQL 000
          • UML
          • VB.Net
          • VBScript
          • Веб-службы
          • WPF
      • Обязательно учите!

          • Назад
          • Бухгалтерский учет
          • Алгоритмы
          • Android
          • Блокчейн
          • Business Analyst
          • Создание веб-сайта
          • CCNA
          • Облачные вычисления
          • 00030003 COBOL 9000 Compiler
              9000 Встроенные системы
            • 00030002 9000 Compiler 9000
            • Ethical Hacking
            • Учебники по Excel
            • Программирование на Go
            • IoT
            • ITIL
            • Jenkins
            • MIS
            • Сеть
            • Операционная система
            • Назад
            • Управление проектами Обзоры
            • Salesforce
            • SEO
            • Разработка программного обеспечения
            • VB A
        • Big Data

            • Назад
            • AWS
            • BigData
            • Cassandra
            • Cognos
            • Хранилище данных
            • 0003
            • HBOps
            • 0003
            • HBOps
            • MicroStrategy
            • MongoDB
        .Учебное пособие по

        Grand Central Dispatch для Swift 4: Часть 1/2

        Примечание об обновлении : Эван Дехайзер обновил это руководство до Swift 4.2. Кристин Абернати написала оригинал.

        Grand Central Dispatch (GCD) — это низкоуровневый API для управления параллельными операциями. Это может помочь вам улучшить отзывчивость вашего приложения, отложив дорогостоящие вычисления в фоновом режиме. С этой моделью параллелизма работать проще, чем с блокировками и потоками.

        В этом руководстве по Grand Central Dispatch, состоящем из двух частей, вы узнаете все тонкости GCD и его Swifty API.Эта первая часть объяснит, что делает GCD, и продемонстрирует несколько основных функций GCD. Во второй части вы узнаете о некоторых дополнительных функциях, которые может предложить GCD.

        Вы будете использовать существующее приложение под названием GooglyPuff . GooglyPuff — это неоптимизированное, «небезопасное для потоков» приложение, которое с помощью API обнаружения лиц Core Image накладывает на обнаруженные лица «глаза». Вы можете выбрать изображения для получения этого эффекта из своей библиотеки фотографий или выбрать изображения, загруженные из Интернета.

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

        Начало работы

        Используйте кнопку Загрузить материалы вверху или внизу этого руководства, чтобы загрузить начальный проект. Откройте его в Xcode и запустите, чтобы увидеть, с чем вам нужно работать.

        Начальный экран изначально пуст. Нажмите + , затем выберите Le Internet , чтобы загрузить предварительно определенные изображения из Интернета.Коснитесь первого изображения, и вы увидите, что к лицу добавлены глаза.

        В этом руководстве вы в основном будете работать с четырьмя классами:

        • PhotoCollectionViewController : начальный контроллер представления. Он отображает выбранные фотографии в виде эскизов.
        • PhotoDetailViewController : отображает выбранную фотографию из PhotoCollectionViewController и добавляет к изображению «глаза».
        • Фотография : Этот протокол описывает свойства фотографии.Он предоставляет изображение, миниатюру и их соответствующие статусы. Проект включает в себя два класса, реализующие протокол: DownloadPhoto , который создает экземпляр фотографии из экземпляра URL , и AssetPhoto , который создает экземпляр фотографии из экземпляра PHAsset .
        • PhotoManager : управляет всеми объектами Photo .

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

        В этой первой части вы поработаете над несколькими улучшениями, включая оптимизацию процесса поиска в Google и обеспечение безопасности потоков PhotoManager .

        Концепции GCD

        Чтобы понять GCD, вам необходимо хорошо разбираться в нескольких концепциях, связанных с параллелизмом и потоками.

        Параллелизм

        В iOS процесс или приложение состоит из одного или нескольких потоков. Планировщик операционной системы управляет потоками независимо друг от друга.Каждый поток может выполняться одновременно, но система должна решить, произойдет ли это, когда это произойдет и как это произойдет.

        Одноядерные устройства достигают параллелизма с помощью метода с квантованием времени . Они запускают один поток, выполняют переключение контекста, затем запускают другой поток.

        Многоядерные устройства, с другой стороны, выполняют несколько потоков одновременно через параллелизм .

        GCD построен поверх потоков. Под капотом он управляет общим пулом потоков.С помощью GCD вы добавляете блоки кода или рабочие элементы в очереди отправки , и GCD решает, в каком потоке их выполнять.

        По мере структурирования кода вы найдете блоки кода, которые могут выполняться одновременно, а некоторые — нет. Затем это позволяет вам использовать GCD, чтобы воспользоваться преимуществами одновременного выполнения.

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

        По сути, параллелизм — это структура , а параллелизм — это выполнение .

        Очереди

        Как упоминалось ранее, GCD работает с очередями отправки через класс, метко названный DispatchQueue . Вы отправляете единицы работы в эту очередь, и GCD будет выполнять их в порядке FIFO (First In, First Out), гарантируя, что первая отправленная задача будет первой запущенной.

        Очереди отправки потокобезопасные , что означает, что вы можете обращаться к ним из нескольких потоков одновременно.Преимущества GCD очевидны, когда вы понимаете, как очереди отправки обеспечивают безопасность потоков для частей вашего собственного кода. Ключом к этому является выбор правильного типа очереди отправки и правильной функции отправки для отправки вашей работы в очередь.

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

        Параллельные очереди позволяют выполнять несколько задач одновременно.Очередь гарантирует запуск задач в том порядке, в котором вы их добавляете. Задачи могут завершаться в любом порядке, и вы не знаете ни времени, которое потребуется для запуска следующей задачи, ни количества задач, которые выполняются в любой момент времени.

        Это сделано намеренно: ваш код не должен полагаться на эти детали реализации.

        См. Пример выполнения задачи ниже:

        Обратите внимание, как задача 1, задача 2 и задача 3 быстро запускаются одна за другой. С другой стороны, выполнение задачи 1 заняло некоторое время после задачи 0.Также обратите внимание, что хотя задача 3 началась после задачи 2, она завершилась первой.

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

        GCD предоставляет три основных типа очередей:

        1. Основная очередь : выполняется в основном потоке и является последовательной очередью.
        2. Глобальные очереди : параллельные очереди, общие для всей системы. Таких очередей четыре с разными приоритетами: высокий, по умолчанию, низкий и фоновый. Очередь с фоновым приоритетом имеет самый низкий приоритет и регулируется при любых операциях ввода-вывода для минимизации негативного воздействия на систему.
        3. Пользовательские очереди : создаваемые вами очереди, которые могут быть последовательными или параллельными. Запросы в этих очередях фактически попадают в одну из глобальных очередей.

        При отправке задач в глобальные параллельные очереди вы не указываете приоритет напрямую.Вместо этого вы указываете свойство класса качества обслуживания (QoS). Это указывает на важность задачи и помогает GCD определять приоритетность задачи.

        Классы QoS:

        • Интерактивный для пользователя : представляет собой задачи, которые необходимо выполнить немедленно, чтобы обеспечить удобство работы пользователя. Используйте его для обновлений пользовательского интерфейса, обработки событий и небольших рабочих нагрузок, требующих малой задержки. Общий объем работы, выполняемой в этом классе во время выполнения вашего приложения, должен быть небольшим.Это должно выполняться в основном потоке.
        • Инициируется пользователем : пользователь инициирует эти асинхронные задачи из пользовательского интерфейса. Используйте их, когда пользователь ожидает немедленных результатов и для задач, необходимых для продолжения взаимодействия с пользователем. Они выполняются в глобальной очереди с высоким приоритетом.
        • Утилита : представляет долго выполняющиеся задачи, обычно с видимым для пользователя индикатором выполнения. Используйте его для вычислений, ввода-вывода, работы в сети, непрерывной передачи данных и подобных задач.Этот класс разработан для обеспечения энергоэффективности. Это будет отображено в глобальной очереди с низким приоритетом.
        • Фон : представляет задачи, о которых пользователь не знает напрямую. Используйте его для предварительной загрузки, обслуживания и других задач, которые не требуют взаимодействия с пользователем и не зависят от времени. Это будет отображаться в глобальной очереди с приоритетом фона.

        Синхронный и асинхронный

        С помощью GCD вы можете отправлять задачи синхронно или асинхронно.

        Синхронная функция возвращает управление вызывающей стороне после завершения задачи. Вы можете запланировать единицу работы синхронно, вызвав DispatchQueue.sync (execute :) .

        Асинхронная функция возвращается немедленно, приказывая запускать задачу, но не дожидаясь ее завершения. Таким образом, асинхронная функция не блокирует текущий поток выполнения от перехода к следующей функции. Вы можете запланировать единицу работы асинхронно, вызвав DispatchQueue.async (выполнить :) .

        Управление задачами

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

        Каждая задача, которую вы отправляете в DispatchQueue , — это DispatchWorkItem . Вы можете настроить поведение DispatchWorkItem , например, его класс QoS или создание нового отсоединенного потока.

        Обработка фоновых задач

        Со всеми этими накопленными знаниями GCD пришло время для вашего первого улучшения приложения!

        Вернитесь в приложение и добавьте несколько фотографий из своей библиотеки фотографий или воспользуйтесь опцией Le Internet , чтобы загрузить несколько фотографий. Коснитесь фото. Обратите внимание, сколько времени требуется, чтобы отобразить подробное изображение фотографии. Отставание более заметно при просмотре больших изображений на более медленных устройствах.

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

        Это похоже на задание для DispatchQueue async !

        Открыть PhotoDetailViewController.swift . Измените viewDidLoad () и замените эти две строки:

        пусть overlayImage = faceOverlayImageFrom (изображение)
        fadeInNewImage (overlayImage)
         

        со следующим кодом:

        // 1
        DispatchQueue.global (qos: .userInitiated) .async {[слабая личность] в
          guard let self = self else {
            возвращение
          }
          пусть overlayImage = self.faceOverlayImageFrom (self.image)
        
          // 2
          DispatchQueue.main.async {[слабое я] в
            // 3
            сам? .fadeInNewImage (overlayImage)
          }
        }
         

        Вот что делает код, шаг за шагом:

        1. Вы перемещаете работу в фоновую глобальную очередь и асинхронно запускаете ее в закрытии. Это позволяет viewDidLoad () завершить работу в основном потоке раньше и сделать загрузку более быстрой.Между тем, обработка обнаружения лица начинается и завершится позже.
        2. На этом обработка распознавания лиц завершена, и вы создали новое изображение. Поскольку вы хотите использовать это новое изображение для обновления вашего UIImageView , вы добавляете новое закрытие в основную очередь. Помните — все, что изменяет пользовательский интерфейс, должно выполняться в основном потоке!
        3. Наконец, вы обновляете пользовательский интерфейс с помощью fadeInNewImage (_ :) , который выполняет плавный переход нового изображения глаз в Google.

        В двух местах вы добавляете [weak self] , чтобы зафиксировать слабую ссылку на self в каждом замыкании. Если вы не знакомы со списками захвата, ознакомьтесь с этим руководством по управлению памятью.

        Создайте и запустите приложение. Скачать фото через Ле Интернет вариант . Выберите фотографию, и вы заметите, что контроллер представления загружается заметно быстрее и после небольшой задержки добавляет глазки:

        Это придает приложению приятный эффект «до» и «после» по мере появления «гуглых глаз».Даже если вы пытаетесь загрузить безумно огромное изображение, ваше приложение не зависнет при загрузке контроллера представления.

        Как правило, вы хотите использовать async , когда вам нужно выполнить сетевую или ресурсоемкую задачу в фоновом режиме, а не блокировать текущий поток.

        Вот краткое руководство о том, как и когда использовать различные очереди с async :

        • Основная очередь : это распространенный выбор для обновления пользовательского интерфейса после завершения работы над задачей в параллельной очереди.Для этого вы кодируете одно закрытие внутри другого. Ориентация на основную очередь и вызов async гарантирует, что эта новая задача будет выполняться через некоторое время после завершения текущего метода.
        • Глобальная очередь : это распространенный выбор для выполнения работы, не связанной с пользовательским интерфейсом, в фоновом режиме.
        • Custom Serial Queue : хороший выбор, если вы хотите выполнять фоновую работу последовательно и отслеживать ее. Это устраняет конкуренцию за ресурсы и состояния гонки, поскольку вы знаете, что одновременно выполняется только одна задача.Обратите внимание: если вам нужны данные из метода, вы должны объявить другое закрытие, чтобы получить его, или подумайте об использовании sync .

        Задержка выполнения задачи

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

        Задумайтесь на мгновение о пользовательском опыте вашего приложения. Возможно, пользователи не понимают, что им делать, когда они впервые открывают приложение — а вы? :]

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

        Откройте PhotoCollectionViewController.swift и заполните реализацию для showOrHideNavPrompt () :

        // 1
        пусть delayInSeconds = 2.0
        
        // 2
        DispatchQueue.main.asyncAfter (крайний срок:.now () + delayInSeconds) {[слабое я] в
          guard let self = self else {
            возвращение
          }
        
          if PhotoManager.shared.photos.count> 0 {
            self.navigationItem.prompt = nil
          } else {
            self.navigationItem.prompt = "Добавьте фотографии с лицами, чтобы их можно было погуглить!"
          }
        
          // 3
          self.navigationController? .viewIfLoaded? .setNeedsLayout ()
        }
         

        Вот что происходит выше:

        1. Вы указываете время задержки.
        2. Затем вы ждете указанное время, а затем асинхронно запускаете блок, который обновляет количество фотографий и обновляет подсказку.
        3. Принудительно расположить панель навигации после установки подсказки, чтобы убедиться, что она выглядит кошерной.

        showOrHideNavPrompt () выполняется в viewDidLoad () и в любое время, когда ваш UICollectionView перезагружается.

        Создайте и запустите приложение. Должна быть небольшая задержка, прежде чем вы увидите подсказку:

        Примечание : Вы можете игнорировать сообщения Auto Layout в консоли Xcode.Все они созданы на iOS и не указывают на ошибку с вашей стороны.

        Почему бы не использовать Таймер ? Вы можете рассмотреть возможность его использования, если у вас есть повторяющиеся задачи, которые легче планировать с помощью Timer . Вот две причины, по которым стоит придерживаться asyncAfter () очереди отправки.

        Одно — читабельность. Чтобы использовать Timer , вы должны определить метод, а затем создать таймер с селектором или вызовом определенного метода. С помощью DispatchQueue и asyncAfter () вы просто добавляете закрытие.

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

        Управление одиночками

        Синглтоны. Любите их или ненавидите, они так же популярны в iOS, как фотографии кошек в Интернете. :]

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

        Поточно-безопасный код можно безопасно вызывать из нескольких потоков или одновременных задач, не вызывая таких проблем, как повреждение данных или сбои приложения. Код, который не является потокобезопасным, может выполняться одновременно только в одном контексте.

        Следует рассмотреть два случая безопасности потоков: во время инициализации экземпляра синглтона и во время чтения и записи в экземпляр.

        Инициализация оказывается легкой задачей из-за того, как Swift инициализирует статические переменные.Он инициализирует статические переменные при первом обращении к ним и гарантирует атомарную инициализацию. То есть Swift рассматривает код, выполняющий инициализацию, как критический раздел и гарантирует его завершение до того, как какой-либо другой поток получит доступ к статической переменной.

        Критическая секция — это фрагмент кода, который должен , а не выполняться одновременно, то есть из двух потоков одновременно. Обычно это происходит из-за того, что код манипулирует общим ресурсом, например переменной, которая может стать поврежденной, если к ней будут обращаться параллельные процессы.

        Откройте PhotoManager.swift , чтобы увидеть, как вы инициализируете синглтон:

        class PhotoManager {
          частный init () {}
          static let shared = PhotoManager ()
        }
         

        Частный инициализатор гарантирует, что только PhotoManager будет назначен общему . Таким образом, вам не нужно беспокоиться о синхронизации изменений в вашем фотоателье между разными менеджерами.

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

        Решение проблемы читателей-писателей

        В Swift любая переменная, объявленная с ключевым словом let , является константой и, следовательно, доступна только для чтения и потокобезопасна. Однако объявите переменную с ключевым словом var , и она станет изменяемой и не поточно-ориентированной, если только тип данных не предназначен для этого. Типы коллекций Swift, такие как Array и Dictionary , не являются потокобезопасными, если объявлены изменяемыми.

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

        Чтобы увидеть проблему, взгляните на addPhoto (_ :) в PhotoManager.swift , который воспроизводится ниже:

        func addPhoto (_ photo: Photo) {
          unsafePhotos.append (фото)
          DispatchQueue.main.async {[слабое я] в
            сам? .postContentAddedNotification ()
          }
        }
         

        Это метод записи , поскольку он изменяет изменяемый объект массива.

        Теперь взгляните на фото собственности, воспроизведенные ниже:

        private var unsafePhotos: [Photo] = []
          
        var photos: [Фото] {
          вернуть небезопасные фотографии
        }
         

        Получатель этого свойства называется методом чтения , поскольку он читает изменяемый массив.Вызывающий получает копию массива и защищен от неправильного изменения исходного массива. Однако это не обеспечивает никакой защиты от того, что один поток вызывает метод записи addPhoto (_ :) , в то время как другой поток одновременно вызывает метод получения для свойства photos .

        Вот почему поддерживающая переменная называется unsafePhotos — если к ней обращаются не в том потоке, вы можете получить странное поведение!

        Примечание : Почему в приведенном выше коде вызывающий получает копию массива фотографий ? В Swift параметры и возвращаемые типы функций передаются либо по ссылке, либо по значению.

        Передача по значению приводит к созданию копии объекта, и изменения в копии не повлияют на оригинал. По умолчанию в Swift экземпляры класса передаются по ссылке, а struct передаются по значению. Встроенные типы данных Swift, такие как Array и Dictionary , реализованы как struct s.

        Может показаться, что в вашем коде много копий при передаче коллекций туда и обратно. Не беспокойтесь о последствиях этого для использования памяти.Типы коллекций Swift оптимизированы для создания копий только при необходимости, например, когда ваше приложение впервые изменяет массив, переданный по значению.

        Это классическая задача читателей-писателей при разработке программного обеспечения. GCD предоставляет элегантное решение для создания блокировки чтения / записи с использованием диспетчерских барьеров . Барьеры диспетчеризации — это группа функций, действующих как узкое место в последовательном стиле при работе с параллельными очередями.

        Когда вы отправляете DispatchWorkItem в очередь отправки, вы можете установить флаги, чтобы указать, что это должен быть единственный элемент, выполняемый в указанной очереди в течение определенного времени.Это означает, что все элементы, отправленные в очередь до барьера отправки, должны быть завершены до того, как будет выполнен DispatchWorkItem .

        Когда приходит очередь DispatchWorkItem , шлагбаум выполняет ее и гарантирует, что очередь не выполняет никаких других задач в течение этого времени. После завершения очередь возвращается к своей реализации по умолчанию.

        На диаграмме ниже показано влияние барьера на различные асинхронные задачи:

        Обратите внимание, что при нормальной работе очередь действует как обычная параллельная очередь.Но когда барьер работает, он, по сути, действует как последовательная очередь. То есть барьер — единственное, что исполняется. После завершения работы барьера очередь снова становится обычной параллельной очередью.

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

        Вы будете использовать настраиваемую параллельную очередь для обработки вашей барьерной функции и разделения функций чтения и записи. Параллельная очередь позволит одновременно выполнять несколько операций чтения.

        Откройте PhotoManager.swift и добавьте частную собственность прямо над декларацией unsafePhotos :

        частный пусть concurrentPhotoQueue =
          DispatchQueue (
            label: "com.raywenderlich.GooglyPuff.photoQueue",
            атрибуты: .concurrent)
         

        Это инициализирует concurrentPhotoQueue как параллельную очередь.Вы устанавливаете метку с описательным именем, которое полезно во время отладки. Как правило, вы используете соглашение об именах в стиле обратного DNS.

        Затем замените addPhoto (_ :) следующим кодом:

        func addPhoto (_ photo: Photo) {
          concurrentPhotoQueue.async (flags: .barrier) {[слабая личность] в
            // 1
            guard let self = self else {
              возвращение
            }
        
            // 2
            self.unsafePhotos.append (фото)
        
            // 3
            DispatchQueue.main.async {[слабое я] в
              сам? .postContentAddedNotification ()
            }
          }
        }
         

        Вот как работает ваш новый метод записи:

        1. Вы отправляете операцию записи асинхронно с барьером. Когда он выполняется, это будет единственный элемент в вашей очереди.
        2. Вы добавляете объект в массив.
        3. Наконец, вы публикуете уведомление о том, что добавили фотографию. Вы должны опубликовать это уведомление в основном потоке, потому что оно будет работать с пользовательским интерфейсом.Таким образом, вы отправляете другую задачу асинхронно в основную очередь, чтобы вызвать уведомление.

        Это касается записи, но вам также необходимо реализовать метод чтения фотографий .

        Чтобы обеспечить безопасность потоков при записи, вам необходимо выполнить чтение в очереди concurrentPhotoQueue . Вам нужны данные, возвращаемые вызовом функции, чтобы асинхронная отправка не сработала. В этом случае отличным кандидатом будет sync .

        Используйте sync для отслеживания вашей работы с барьерами отправки или когда вам нужно дождаться завершения операции, прежде чем вы сможете использовать данные, обработанные закрытием.

        Но вы должны быть осторожны. Представьте, что вы вызываете sync и нацеливаетесь на текущую очередь, в которой вы уже работаете. Это приведет к тупиковой ситуации .

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

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

        Вот краткий обзор того, когда и где использовать sync :

        • Основная очередь : Будьте ОЧЕНЬ осторожны по тем же причинам, что и выше; эта ситуация также может привести к тупиковой ситуации.Это особенно плохо для основной очереди, потому что все приложение перестанет отвечать.
        • Глобальная очередь : это хороший кандидат для синхронизации работы через диспетчерские барьеры или при ожидании завершения задачи, чтобы вы могли выполнить дальнейшую обработку.
        • Custom Serial Queue : будьте ОЧЕНЬ осторожны в этой ситуации; если вы работаете в очереди и вызываете sync для той же очереди, вы обязательно создадите тупик.

        Еще в PhotoManager.swift изменить фото получить свойство:

        var photos: [Фото] {
          var photosCopy: [Фото]!
        
          // 1
          concurrentPhotoQueue.sync {
        
            // 2
            photosCopy = self.unsafePhotos
          }
          вернуть фотографииКопировать
        }
         

        Вот что происходит, шаг за шагом:

        1. Отправка синхронно в concurrentPhotoQueue для выполнения чтения.
        2. Сохраните копию массива фотографий в фотографиях Копируйте и верните ее.

        Создайте и запустите приложение. Скачать фото через Ле Интернет вариант . Он должен вести себя так же, как и раньше, но под капотом у вас есть несколько очень счастливых нитей.

        Поздравляем — ваш синглтон PhotoManager теперь поддерживает многопоточность! Независимо от того, где и как вы читаете или пишете фотографии, вы можете быть уверены, что это произойдет безопасно и без сюрпризов.

        Куда идти дальше?

        В этом руководстве Grand Central Dispatch вы узнали, как сделать свой код потокобезопасным и как поддерживать скорость отклика основного потока при выполнении задач, интенсивно использующих ЦП.

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

        Если вы планируете оптимизировать свои собственные приложения, вам действительно следует профилировать свою работу с помощью встроенного в Xcode Time Profiler . Использование этого инструмента выходит за рамки данного руководства, поэтому ознакомьтесь с разделом «Как использовать инструменты», чтобы получить отличный обзор.

        Вы также можете ознакомиться с отличным докладом Роба Пайка о параллелизме и параллелизме.

        Наша серия видеоуроков по параллельному использованию iOS с GCD и операциям также охватывает многие темы, которые мы рассмотрели в этом руководстве.

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

        Если у вас есть вопросы или комментарии, не стесняйтесь присоединиться к обсуждению ниже!

        raywenderlich.com Еженедельно

        Информационный бюллетень raywenderlich.com — это самый простой способ оставаться в курсе всего, что вам нужно знать как разработчику мобильных приложений.

        Получайте еженедельный дайджест наших руководств и курсов, а в качестве бонуса получите бесплатный углубленный курс по электронной почте!

        .

Отправить ответ

avatar
  Подписаться  
Уведомление о
Back to top