рд╣рдо рдХрдИ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, iOS рдХреЗ рд▓рд┐рдП
рд╕рд╛рдЙрдВрдбрдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХрд╛рдлреА рднрд╡реНрдп рджрд┐рдЦрддреЗ рд╣реИрдВред рд╡реЗ рдЫреЛрдЯреЗ рд╣реИрдВ, (рдЙрдореНрдореАрдж рд╣реИ) рдкрдардиреАрдп рд╣реИрдВ, рдФрд░ рд╡реЗ рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рд╡рд╣ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдирдХреЗ рдирд╛рдо рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ, рдХреЛрдб рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╡рд░реНрдЧред рддреЛ, рдЖрдк рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ -
рдореЗрдореЛрд░реА рд▓реАрдХ рдЬреИрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ?
рдореЗрдореЛрд░реА рд▓реАрдХреНрд╕
рдХрднреА-рдХрднреА рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
final class UseCase { weak var delegate: UseCaseDelegate? private let service: Service init(service: Service) { self.service = service } func run() { service.makeRequest(handleResponse) } private func handleResponse(response: ServiceResponse) {
рдЪреВрдВрдХрд┐
рд╕реЗрд╡рд╛ рдкрд╣рд▓реЗ
рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реЛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдПрдХ рдирд┐рдЬреА рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ
рд╣реИрдВрдбрд▓рдкреНрд░реЛрд╕реЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛, рдЬреЛ
рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рд╣рдо
рд╕реЗрд╡рд╛ рдХреЛ
рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреЗ рд▓рд┐рдП
рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди
рдХрд░рддреЗ рд╣реИрдВ ред рдпрджрд┐
рд╕реЗрд╡рд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреА рд╣реИ - рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рддреЛ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рдПрдХ рд╕рд░рд╕рд░реА рдЕрдзреНрдпрдпрди рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рд▓реАрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЬреЙрди рд╕реИрдВрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрджреНрднреБрдд
рдкреЛрд╕реНрдЯ рднреА рд╣реИред рд▓реЗрдХрд┐рди рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рдЬрд╣рд╛рдВ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВред (рдмреЗрд╢рдХ, рд╣рдо рдпрд╣рд╛рдВ рдЕрдиреБрднрд╡ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ рдмреЛрд▓ рд░рд╣реЗ рд╣реИрдВред)
рдЬреИрд╕рд╛ рдХрд┐ рдЧрд┐рд▓рд╣рд░реНрдореЗ рдиреЗ
рд╣рд╛рд▓рд┐рдпрд╛ рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЙрдВрдбрдХреНрд▓рд╛рдЙрдб рдРрдк рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ "рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рд╕реНрддреБ рдкреИрдЯрд░реНрди" рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдЕрдХреНрд╕рд░ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛
VIPER рд╣реИ ред рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢
VIPER рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо
ModuleFactory рдХрд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛
ModuleFactory рдХреБрдЫ рдЗрдирдкреБрдЯ, рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЗрддрд╛ рд╣реИ - рдФрд░ рдПрдХ
UIViewController рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдХреА рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕реНрдЯреИрдХ
рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕
VIPER рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдФрд░ рднрдЧреЛрдбрд╝реЗ рджреЛрд╖ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрдиреЗ рд░рд╣рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝ рдЬрд╛рдПрдЧреА, рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред
рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреБрдЫ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдХрд░ рдЗрддрдиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд▓реАрдХ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рд╕рдм рд╕рдордп рдХреА рднрд╛рд░реА рдмрд░реНрдмрд╛рджреА рдереАред
рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг
рдЬрд╡рд╛рдм, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╢реАрд░реНрд╖рдХ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рдБ рд╣реИред рдФрд░ рд╣рдо рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ,
VIPER рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рдореВрд╣ рд╣реИрдВ, рдореЗрдореЛрд░реА рд▓реАрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдПрдХ рд░реВрдк рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ рд╕рд░рд▓ рд╣реИ: рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдПрдХ
VIPER рдореЙрдбреНрдпреВрд▓ рдХреЛ
рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдлрд┐рд░ рд╣рдо
UIViewController рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдЗрд╕рдХреЗ рд╕рд╛рде рдирд╖реНрдЯ рд╣реЛ рдЧрдП рд╣реИрдВред
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХреГрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ
UIViewController рдХреЗ рдЕрд▓рд╛рд╡рд╛
VIPER рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ
ModuleFactory рдореЗрдВ рдПрдХрдорд╛рддреНрд░
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд╛рд░реНрдп рд╣реИ
рдлрдВрдХ рдореЗрдХ () -> UIViewController ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ? рдЗрд╕ рдирдИ рдкрджреНрдзрддрд┐ рдХреЛ
рдЖрдВрддрд░рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓
@ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореЙрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓рд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдВрддрддрдГ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
public final class ModuleFactory {
рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪ рдХреА рдХрдореА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
final class ModuleMemoryLeakTests: XCTestCase {
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕
VIPER рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рд╕рдВрднрд╡ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХрд╛рдо рд╣реИред рдпрд╣ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдВрджрд┐рдЧреНрдз рднреА рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬреЛ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рдорд┐рд▓рд╛ред рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рдж, рдкрд░реАрдХреНрд╖рдг рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рднреА рджреЗрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рд╣рдо рд╕рд┐рд░реНрдл
рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рд▓рд┐рдВрдХ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░
UIViewController рдХреЛ
рдореЙрдХ рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рдирдХрд▓реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
рд╡реНрдпреВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдбрдореА рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред