рдПрдХ рдЪреАрдЬрд╝ рдХреЗ рдмреАрдЪ рдХрд╛ рдореБрдЦреНрдп рдЕрдВрддрд░ рдЬреЛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдЪреАрдЬрд╝ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдорд░рдореНрдордд рдХрд░рдирд╛ рдпрд╛ рдорд░рдореНрдордд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
- рдбрдЧрд▓рд╕ рдПрдбрдореНрд╕рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА 1983 рд╕реЗ рд╣реИ рдФрд░ рд╕реА ++ рдЬреИрд╕реА рд╣реА рдЙрдореНрд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрдИрдУрдПрд╕ 2.0 рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреЗрд╡рд▓ 2008 рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реБрдЖ - рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рдЖрдИрдлреЛрди рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг, рдЬрд┐рд╕рдореЗрдВ рдРрдкрд╕реНрдЯреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рд╛рдорд┐рд▓ рдерд╛, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦрд░реАрджрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджреНрджреЗрд╢реНрдп рд╕реА рдХреА рдирд┐рд░рдВрддрд░ рд╕рдлрд▓рддрд╛ рди рдХреЗрд╡рд▓ iOS рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдФрд░ AppStore рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рдХреНрд░реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЧрдИ, рдмрд▓реНрдХрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рднрд╛рд╖рд╛ рджреЛрдиреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдРрдкреНрдкрд▓ рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдпрд╛рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рднреАред
TIOBE рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдиреЗ 2013 рдХреА рд╢реБрд░реБрдЖрдд рддрдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдореЗрдВ C ++ рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рд╕реА рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рдж рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд░рд╣рд╛ред
рдЖрдЬ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡ C рдореЗрдВ
KVC рдФрд░
KVO рдЬреИрд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдкреБрд░рд╛рдиреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ iPhone рдХреЗ 4 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдереЗ, рдФрд░ рдирдП рдлреАрдЪрд░реНрд╕ рдЬреИрд╕реЗ
рдмреНрд▓реЙрдХ (Mac OS 10.6 рдФрд░ iOS 4 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ) рдФрд░
рдСрдЯреЛрдореИрдЯрд┐рдХ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ (ARC) , рдореИрдХ рдУрдПрд╕ 10.7 рдФрд░ рдЖрдИрдУрдПрд╕ 5 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ), рдЬреЛ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЧрдВрднреАрд░ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗред
рдХреЗрд╡реАрдУ рдПрдХ рдРрд╕реА рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ (рдкреНрд░реЗрдХреНрд╖рдХ) рдореЗрдВ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ (рджреЗрдЦреЗ рдЧрдП) рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдмрд┐рдирд╛ рджреЗрдЦреЗ рдЧрдП рд╡рд╕реНрддреБ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдХрд╛ рдкрд░рд┐рдЪрдп рджрд┐рдП рдмрд┐рдирд╛ред рдХреЗрд╡реАрдУ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:
1.
рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрди - рд╡рд╕реНрддреБ рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди, рдЗрд╕ рддрдереНрдп рд╕реЗ рдорд┐рд▓рдХрд░ рдХрд┐ рд╡рд╕реНрддреБ рдПрдХ рдордирдорд╛рдиреА рд╡рд╕реНрддреБ (рдЬрд┐рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛
рд╣реИ - рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯред рдЙрд╕рдХреЗ рдмрд╛рдж, "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ" рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
UIScrollView рд╕реНрдХреНрд░реЙрд▓рд╡реНрдпреВрдбрд╛рд╕рдХреНрд░реЛрд▓ : рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдХреЗ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЬрдм рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╣реА рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛ, рддреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдЖрдпрд╛ рдерд╛ред
2.
рд▓рдХреНрд╖реНрдп-рдХреНрд░рд┐рдпрд╛ ред рдЗрд╕ рддрдХрдиреАрдХ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ "рдкреНрд░рддрд┐рдирд┐рдзрд┐" рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕рдХреЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдШрдЯрдирд╛ рд╣реЛрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░
UIControl рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ
UISwitch рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд▓рдХреНрд╖реНрдп-рдПрдХреНрд╢рди рдЬреЛрдбрд╝реА
рд╕реМрдВрдкреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдг (UIControlEventValueChanged рдЗрд╡реЗрдВрдЯ) рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рдПрдХ "рд▓рдХреНрд╖реНрдп" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдПрдХ рд╣реА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдпреВрдЖрдИрд╕реНрд╡рд┐рдЪ)ред
3. рдХреЙрд▓рдмреИрдХ рдмреНрд▓реЙрдХред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░реЗрдХреНрд╖рдХ рд╡рд╕реНрддреБ рд╕реЗ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдмреНрд▓реЙрдХ рддрдХ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдмреНрд▓реЙрдХ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреНрд▓реЙрдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рднреАрддрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдмреАрдЪ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдпрд╛ рд▓рдХреНрд╖реНрдп рдХрд╛ рд╕рдВрджрд░реНрдн рдХрдордЬреЛрд░ рд╣реИ (рдХрдордЬреЛрд░ рд╕рдВрджрд░реНрдн), рддреЛ рдмреНрд▓реЙрдХ рдХрд╛ рд▓рд┐рдВрдХ рдордЬрдмреВрдд рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд┐рдХрд▓рд╛), рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдмреНрд▓реЙрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВред рдмреНрд▓реЙрдХ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдЪрдХреНрд░реАрдп рдордЬрдмреВрдд рдХрдиреЗрдХреНрд╢рди рдФрд░ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рджреЛ рддрдХрдиреАрдХреЛрдВ рдХреА рддрд░рд╣, рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмреНрд▓реЙрдХ рдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рд░рдг рд╕реЗред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдПрдХ рдмреНрд▓реЙрдХ рд╡реИрд╕реЗ рднреА рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА рдордЬрдмреВрдд рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЧрд▓рддреА рд╕реЗ рдкрдХрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрд╛
рд╢реВрдиреНрдп рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
4.
NSNotificationCenter рдЖрдкрдХреЛ рдЕрд▓рд░реНрдЯ (NSNotification) рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо рдФрд░ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреА рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рдордирдорд╛рдирд╛ рд╡рд╕реНрддреБ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрд▓рд░реНрдЯ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдерд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕ рдирд╛рдо рдФрд░ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд╕рд╛рде рдЕрд▓рд░реНрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИред рд╕реВрдЪрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд▓рдХреНрд╖реНрдп-рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╛ рдХреЙрд▓рдмреИрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд┐рдЫрд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, NSNotificationCenter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдХрдордЬреЛрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
5.
NSKeyValueObserves NSObject рд╡рд░реНрдЧ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ addObserver: forKeyPath: рд╡рд┐рдХрд▓реНрдк: рд╕рдВрджрд░реНрдн: рдЪрдпрдирдХрд░реНрддрд╛: рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ (рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓) рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдкрде рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ (рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ) рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рд░ рдмрд╛рд░ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдЕрд╡рд▓реЛрдХрди рдкреИрдЯрд░реНрди рдХреЗ рд╕рдорд╛рди, рдЕрд╡рд▓реЛрдХрди: рдкрд░рд┐рд╡рд░реНрддрди: рд╕рдВрджрд░реНрдн: рд╕рдВрджрд░реНрдн: рд╕рдВрджреЗрд╢: рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЗрд╡реАрдУ рдЖрдкрдХреЛ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░реЗрдХреНрд╖рд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд╕рдордЧреНрд░ рдХреБрдВрдЬреА рдкрде рдХреЗ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рднреА рд╣реЛрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреЗред
KVO рдХреА рд╕реНрдкрд╖реНрдЯ рд╢рдХреНрддрд┐ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдирд╛рдкрд╕рдВрдж рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ (рдФрд░ рд╕рд╣реА) рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡реАрдУ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реАрд░реНрд╖рдХ рдФрд░ isFiteite рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ ETRDocument рд╡рд░реНрдЧ рд╣реИ
@interface ETRDocument : NSObject @property (nonatomic, copy) NSString *title; @property (nonatomic) BOOL isFavorite; @end
рдФрд░ рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕рд╛рд░рдгреАрдмрджреНрдз рд╕реЗрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
@class ETRDocument; @interface ETRDocumentCell : UITableViewCell @property (nonatomic, strong) ETRDocument *document; @property (nonatomic, strong) IBOutlet UILabel *titleLabel; @property (nonatomic, strong) IBOutlet UIButton *isFavoriteButton; - (IBAction)toggleIsFavorite; @end @implementation ETRDocumentCell - (void)updateIsFavoriteButton { self.isFavoriteButton.selected = self.document.isFavorite; } - (void)toggleIsFavorite { self.document.isFavorite = !self.document.isFavorite; [self updateIsFavoriteButton]; } - (void)setDocument:(ETRDocument *)document { _document = document; self.titleLabel.text = self.document.title; [self updateIsFavoriteButton]; } @end
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЗрд╕рдлрд╝рд╛рдЗрдЯ рдХрд╛ рдорд╛рди рди рдХреЗрд╡рд▓ рдПрдХ рдмрдЯрди рджрдмрд╛рдХрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдмрд╛рд╣рд░реА рд╕реЗрд▓ рддрдХ рднреА рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд░рд╣рд╛ рд╣реЛ рддреЛ рдлрд╝реЗрд╡рд░рд┐рдЯрд╛рдЗрдЯ рдореЗрдВ, рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ редFavoriteButton, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд░ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реЗрд▓ рдХреЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕реЗрд▓ рдкрд░ рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡реАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд░реНрдЧ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА: рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд╕реЗрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдХреВрдЯрдмрджреНрдз рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
- (void)startObservingIsFavorite { [self.document addObserver:self forKeyPath:@"isFavorite" options:0 context:NULL]; } - (void)stopObservingIsFavorite { [self.document removeObserver:self forKeyPath:@"isFavorite"]; } - (void)setDocument:(ETRDocument *)document { [self stopObservingIsFavorite]; _document = document; [self startObservingIsFavorite]; self.titleLabel.text = self.document.title; [self updateIsFavoriteButton]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { [self updateIsFavoriteButton]; }
рд▓реЙрдиреНрдЪ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕реЗрд▓ рдЗрд╕реНрдлрд╝рд╛рдЗрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред рд╣рдо рднреА toggleIsFavorite рд╕реЗ рдХреЙрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ IsFavorite рдорд╛рди рдХреЛ рдмрджрд▓ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ EXC_BAD_ACCESS рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛? рдЖрдЗрдП
NSZombieEnabled рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕ рдмрд╛рд░ рдЧрд┐рд░рдиреЗ рдкрд░ рд╣рдореЗрдВ рдПрдХ рдФрд░ рд╕рд╛рд░реНрдердХ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗрдЧрд╛:
*** - [ETRDocumentCell рд░рд┐рдЯреЗрди]: рдбреАрд▓рдХреНрд▓реЛрдХреЗрдЯреЗрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЧрдпрд╛ рд╕рдВрджреЗрд╢ 0x8bcda20
рджрд░рдЕрд╕рд▓, рдХреЗрд╡реАрдУ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╣рдо
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:
рдиреЛрдЯ: Add -bserver рдХреЛ рджреЗрдЦрдиреЗ рд╡рд╛рд▓рд╛ рдореБрдЦреНрдп-рдореВрд▓реНрдп: forKeyPath: рд╡рд┐рдХрд▓реНрдк: рд╕рдВрджрд░реНрдн: рд╡рд┐рдзрд┐ рдЕрд╡рд▓реЛрдХрди рдСрдмреНрдЬреЗрдХреНрдЯ, рдкреНрд░реЗрдХреНрд╖рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдпрд╛ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдмрдирд╛рдП рд░рдЦреЗрдВ, рдФрд░ рдЕрд╡рд▓реЛрдХрди рдХрд┐рдП рдЧрдП, рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрджрд░реНрднред
рдЕрд╡рд▓реЛрдХрди рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдпрд╛ рдкреНрд░реЗрдХреНрд╖рд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╛ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдХрд┐ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред
рдХреЗрд╡реАрдУ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд╕реА рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реВрдЪрдХ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд╡рд╕реНрддреБ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡реАрдУ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдирд╣реАрдВ рдорд╛рдиреЗрдЧрд╛: рдпрд╣ рдЗрд╕реЗ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ рдпрд╛ рдЗрд╕рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрджрд░реНрдн рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ "рд╣реИрдВрдЧрд┐рдВрдЧ" рд▓рд┐рдВрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдордиреЗ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЖрдЧреЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕рдВрджрд░реНрдн рдХрд╛ рдПрдХ рдЕрд▓рдЧ "рд╕рдЪ" рдЙрджреНрджреЗрд╢реНрдп рд╣реИред
рдпрджрд┐ рджреЗрдЦреА рдЧрдИ рд╡рд╕реНрддреБ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреЛрдИ рдорд╛рди рдЕрдм рдФрд░ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ), рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреА:
рдХрдХреНрд╖рд╛ ETRDocument рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг 0xac62490 рдирд┐рдкрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрдмрдХрд┐ рдкреНрд░рдореБрдЦ рдореВрд▓реНрдп рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдЕрднреА рднреА рдкрдВрдЬреАрдХреГрдд рдереЗ
рдЗрд╕рдХреЗ рд╕рд╛рдеред рдЕрд╡рд▓реЛрдХрди рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рд╣реЛ рдЧрдИ рдереА, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧрд▓рддреА рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИред
рдпрд╣рд╛рдВ рдбрд┐рдмрдЧрд░ рдореЗрдВ рд░реБрдХрдиреЗ рдХреЗ рд▓рд┐рдП NSKVODeallocateBreak рдкрд░ рдПрдХ рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рд╡рд░реНрддрдорд╛рди рдЕрд╡рд▓реЛрдХрди рдЬрд╛рдирдХрд╛рд░реА рд╣реИ:
<NSKeyValueObservationInfo 0xaaa77e0> (
<NSKeyValueObservance 0xaaa77a0: рдСрдмреНрдЬрд░реНрд╡рд░: 0xaaa2100, рдореБрдЦреНрдп рдкрде: isFavorite, рд╡рд┐рдХрд▓реНрдк:
<рдирдпрд╛: рдирд╣реАрдВ, рдкреБрд░рд╛рдирд╛: рдирд╣реАрдВ, рдкреВрд░реНрд╡: рдирд╣реАрдВ> рд╕рдВрджрд░реНрдн: 0x0, рд╕рдВрдкрддреНрддрд┐: 0xabf12e0>
)
рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрд╡реЗрджрди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реЗрд▓ рджреЗрдЦреЗ рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реЗрд▓ рдХреЛ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ KVO рдЗрд╕реЗ "рд╣реИрдВрдЧрд┐рдВрдЧ" рд▓рд┐рдВрдХ (рдЬреЛ ARC рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд_рд╕реБрдзрд╛рд░ рд╕рдВрд╢реЛрдзрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ) рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдЙрд╕ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдареАрдХ рдпрд╣реА рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ "рдЕрд╕реБрд░рдХреНрд╖рд┐рдд_рд╕реБрдВрджрд░" рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд "рдХрдордЬреЛрд░" рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЗ "рдлрд╛рдВрд╕реА" рд▓рд┐рдВрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рдЗрд╕ рдХреНрд░реИрд╢ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреАрд▓рдХреНрд▓реЙрдХ рд╕реЗ рдХреЗрд╡рд▓ stopObservesIsFavorite рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рд╣рдорд╛рд░реЗ рд╕реЗрд▓ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдореБрдЦреНрдп рдкрде "рдлрд╝реЙрд░рдлрд╝рд╛рдЗрдЯ" рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╕реЗрд▓ рд╕реНрд╡рдпрдВ рдкрд░ рдореБрдЦреНрдп рдкрде "document.isFavorite" рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕реЗрд▓ рдХреЛ рджреЛрдиреЛрдВ рдХреЛ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ isFavorite рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рд▓рд┐рдВрдХ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрднреА рднреА рдбреАрд▓ рдСрд╡рд░ рд╕реЗ рд░рд┐рдореВрд╡рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдк рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рди рдХреЗрд╡рд▓ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╢реАрд░реНрд╖рдХ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдУрд╡рд░рдбрд╛рдЗрдбрд┐рдВрдЧ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ: рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рдПрдХ рдФрд░ KVO рдЕрд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдЪрд▓реЗрдЧрд╛:
@implementation ETRDocumentCell - (void)awakeFromNib { [super awakeFromNib]; [self addObserver:self forKeyPath:@"document.isFavorite" options:0 context:NULL]; [self addObserver:self forKeyPath:@"document.title" options:0 context:NULL]; } - (void)dealloc { [self removeObserver:self forKeyPath:@"document.isFavorite"]; [self removeObserver:self forKeyPath:@"document.title"]; } - (void)toggleIsFavorite { self.document.isFavorite = !self.document.isFavorite; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"document.isFavorite"]) { self.isFavoriteButton.selected = self.document.isFavorite; } else if ([keyPath isEqualToString:@"document.title"]) { self.titleLabel.text = self.document.title; } } @end
рдПрдХ рдкреБрд░рд╛рдиреА (рд▓реЗрдХрд┐рди рдмрд╣реБрдд рддрд░рд╣ рдХреА рдирд╣реАрдВ) рджреЛ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдирдХрд▓ рдХрд┐рдП рдЧрдП рддрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред рдпрд╣ рди рдХреЗрд╡рд▓ рдмрджрд╕реВрд░рдд рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп "рдХреЙрдкреА-рдкреЗрд╕реНрдЯ" рдХреА рддрд░рд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднреА рднрд░рд╛ рд╣реБрдЖ рд╣реИред
рд╣рдо рдЗрд╕ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдФрд░ рдЕрдм рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рдХреБрдЫ рдмреБрд░рд╛ рдЕрднреА рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдбреАрдмрдЧрд░ рдореЗрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреЗрд╡реАрдУ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЖрдЗрдП рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдВ, рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реА рдФрд░ "рдкрд░рд┐рд╖реНрдХреГрдд" рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╢реАрд░реНрд╖рдХ рдФрд░ рд╕рдорд╛рди рдмрдЯрди рднреА рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рддрд╛рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рд░реНрдп рд╡реНрдпрд░реНрде рди рд╣реЛ, рд╣рдо рдкреБрд░рд╛рдиреЗ рд╕реЗ рдПрдХ рдирдпрд╛ рд╕реЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред
рдФрд░ рд╕реЗрд▓ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕реА KVO рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
@implementation ETRAdvancedDocumentCell - (void)awakeFromNib { [super awakeFromNib]; [self addObserver:self forKeyPath:@"document.isFavorite" options:0 context:NULL]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { [self updateBackgroundColor]; } ...
рдорд╣рд╛рди, рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рдмрджрд▓рддреА рд╣реИред рд▓реЗрдХрд┐рди рдмрдЯрди рдиреЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рд╢реАрд░реНрд╖рдХ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдЕрдкрдбреЗрдЯрдмреИрдХрдЧреНрд░рд╛рдЙрдВрдбрдХреЛрд▓рд░ рдХреЛ рдмрд╣реБрдд рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, ETRAdvancedDocumentCell рдХреЛ рдСрдмреНрдЬрд╝рд░реНрд╡рд╡реИрд▓рдлреЙрд░рдХреЗрдИрдкреИрде рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрд╡рд▓реЛрдХрди рдФрд░ ETRDocumentCell рджреЛрдиреЛрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╣рдо
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд╛рддреЗ
рд╣реИрдВ :
рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ * рдпрджрд┐ рдпрд╣ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ *ред
NSObject рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдмреЗрд╢рдХ, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ ETRDocumentCell рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВрд╡реИрд▓реНрдпреВ рдлрд╝реЙрд░рдХреЗрде, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
[рд╕реБрдкрд░ рдУрд╡рд░рд╡реИрд▓реНрдпреВрдлрд╝реЛрд░рдХреЗрдкреИрде: рдХреАрдкрде рдСрдлрд╝рдСрдмрдЬреЗрдХреНрдЯ: рдСрдмреНрдЬреЗрдХреНрдЯ рдЪреЗрдВрдЬ: рдЪреЗрдВрдЬ рд╕рдВрджрд░реНрдн: рд╕рдВрджрд░реНрдн] ETRAdvancedDocumentCell рд╕реЗред
рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ ETRAdvancedDocumentCell рдиреЗ рдЦреБрдж рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреА -рдкреИрде рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ: рдореВрд▓ рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ (рд╕реНрд╡рдпрдВ) рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реА keyPath (document.isFavorite) рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╕рдВрджрд░реНрдн рддрд░реНрдХ рдХрд╛ "рд╕рд╣реА" рдЙрджреНрджреЗрд╢реНрдп рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
static void* ETRAdvancedDocumentCellIsFavoriteContext = &ETRAdvancedDocumentCellIsFavoriteContext; @implementation ETRAdvancedDocumentCell - (void)awakeFromNib { [super awakeFromNib]; [self addObserver:self forKeyPath:@"document.isFavorite" options:0 context:ETRAdvancedDocumentCellIsFavoriteContext]; } - (void)dealloc { [self removeObserver:self forKeyPath:@"document.isFavorite" context:ETRAdvancedDocumentCellIsFavoriteContext]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == ETRAdvancedDocumentCellIsFavoriteContext) { [self updateBackgroundColor]; } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } ...
ETRAdvancedDocumentCellIsFavoriteContext рд╕реНрдЯреИрдЯрд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрд╕рдХрд╛ рдЕрдкрдирд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдШреЛрд╖рд┐рдд рд╕рднреА рдЪрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕рдВрджрд░реНрдн рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рднреА рд░реЛрдХрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрддреНрд╕реБрдХ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ iOS 5 рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рдереА, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдерд╛ред рдЗрд╕рдиреЗ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди ETRDocumentCell рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛: рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕рд╕реЗ рд╕реБрдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ UITableViewCell рд╡рд░реНрдЧ рдУрд╡рд░рд╡реНрдпреВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИForKeyPath рдЪрдпрдирдХрд░реНрддрд╛? рдЖрдк рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реБрдкрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд┐рдд рдбреНрд░реЙрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
*** рдЕрдирдХреИрдкреНрдб рдЕрдкрд╡рд╛рдж 'NSInternalInconsistencyException' рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдкреНрддрд┐ рдРрдк,
рдХрд╛рд░рдг: '<ETRDocumentCell: 0x8d3c540; baseClass = UITableViewCell;
рдлреНрд░реЗрдо = (0 0; 320 64); autoresize = рдбрдмреНрд▓реНрдпреВ; рдкрд░рдд = <CALayer: 0x8d3c730 >>:
An -oberveValueForKeyPath: OfObject: рдкрд░рд┐рд╡рд░реНрддрди: рд╕рдВрджрд░реНрдн: рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд▓рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред
рдореБрдЦреНрдп рдкрде: document.title
рджреЗрдЦреЗ рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ: <ETRDocumentCell: 0x8d3c540; baseClass = UITableViewCell;
рдлреНрд░реЗрдо = (0 0; 320 64); autoresize = рдбрдмреНрд▓реНрдпреВ; рдкрд░рдд = <CALayer: 0x8d3c730 >>
рдмрджрд▓реЗрдВ: {
рджрдпрд╛рд▓реБ = 1;
}
рд╕рдВрджрд░реНрдн: 0x0 '
*** рдкрд╣рд▓реЗ рдлреЗрдВрдХ рдХреЙрд▓ рдвреЗрд░:
(
0 CoreFoundation 0x0173b5e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x014be8b6 objc_exception_throw + 44
2 CoreFoundation 0x0173b3bb + [NSException рдмрдврд╝рд╛рдПрдБ: рдкреНрд░рд╛рд░реВрдк:] + 139
3 рдлрд╛рдЙрдВрдбреЗрд╢рди 0x0118863f - [NSObject (NSKeyValueObserves) рдЕрд╡рд▓реЛрдХрди рдХрд░реЗрдВрд╡реНрдпреВрдлрд╝реЛрд░рдХреЗрдкреИрде: рд╡рд┐рд╖рдп: рдкрд░рд┐рд╡рд░реНрддрди: рд╕рдВрджрд░реНрдн:] + 94
4 ETRKVO 0x00002e35 - [ETRDocumentCell рдЕрд╡рд▓реЛрдХрдиValueForKeyPath: рд╡рд┐рд╖рдп: рдкрд░рд┐рд╡рд░реНрддрди: рд╕рдВрджрд░реНрдн:] + 229
5 рдлрд╛рдЙрдВрдбреЗрд╢рди 0x0110d8c7 NSKeyValueNotifyObserver + 362
6 рдлрд╛рдЙрдВрдбреЗрд╢рди 0x0110f206 NSKeyValueDidChange + 458
...
рдФрд░ рдХреЙрд▓ рд╡рд╛рдкрд╕ рдирд┐рдХрд╛рд▓реЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рдХреА рдХреНрдпрд╛ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдУрд╡рд░рд╡реНрдпреВ рдлрд╝реЛрд░рдХрд╛рдЗрдкреИрде рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд░реНрдЧ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд)? рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рд╕реНрд╡рдпрдВ рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрдЪреНрдЪреЗ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реБрдкрд░ рдХреЙрд▓ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдорд╛рдзрд╛рди рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдХ рдЙрдЪрд┐рдд рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, [рд╕реБрдкрд░ рд░реЗрд╕реНрдкреЛрдВрдбреЙрдЯрд╕реЗрд▓реЗрдХреНрдЯрд░: ...], рдЬреЛ рд╣рдореЗрд╢рд╛ рдпрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд░рд┐рд╕реНрдкреЙрдиреНрдбреНрд╕рдЯрд╛рдЗрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддреА рд╣реИ: рдФрд░ рдЗрд╕реЗ рд╕реБрдкрд░ рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИред рдпрд╣ рдереЛрдбрд╝реА рд▓рдВрдмреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [[ETRDocumentCell superclass] instancesRespondToSelector: ...]ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рд╣рдореЗрдВ рдзреЛрдЦрд╛ рджреЗ рд░рд╣рд╛ рд╣реИ, рдФрд░ [[NSObject рд╡рд░реНрдЧ] instancesRespondToSelector: @selector (рдУрд╡рд░рд╡реНрдпреВ рджреЗрдЦреЗрдВ): TheObject рдХрд╛: рдкрд░рд┐рд╡рд░реНрддрди: рд╕рдВрджрд░реНрдн :)] рд░рд┐рдЯрд░реНрди YES, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрд░реЛрдХреНрдд рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдпрд╛ рддреЛ рдХрднреА рднреА рд╕реБрдкрд░ рдХреЙрд▓ рди рдХрд░реЗрдВ рдФрд░ рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ рдХреЗ рддрд░реНрдХ рдХреЛ рддреЛрдбрд╝ рджреЗрдВ, рдпрд╛ рдХреЗрд╡рд▓ рдЙрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИрдВ, рдЕрдкрд╡рд╛рдж рд╣реЛрдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рдкрд░, рдХреБрдЫ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред
static void* ETRDocumentCellIsFavoriteContext = &ETRDocumentCellIsFavoriteContext; static void* ETRDocumentCellTitleContext = &ETRDocumentCellTitleContext; @implementation ETRDocumentCell - (void)awakeFromNib { [super awakeFromNib]; [self addObserver:self forKeyPath:@"document.isFavorite" options:0 context:ETRDocumentCellIsFavoriteContext]; [self addObserver:self forKeyPath:@"document.title" options:0 context:ETRDocumentCellTitleContext]; } - (void)dealloc { [self removeObserver:self forKeyPath:@"document.isFavorite" context:ETRDocumentCellIsFavoriteContext]; [self removeObserver:self forKeyPath:@"document.title" context:ETRDocumentCellTitleContext]; } - (void)toggleIsFavorite { self.document.isFavorite = !self.document.isFavorite; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == ETRDocumentCellIsFavoriteContext) { self.isFavoriteButton.selected = self.document.isFavorite; } else if (context == ETRDocumentCellTitleContext) { self.titleLabel.text = self.document.title; } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } @end
рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдХреЗрд╡реАрдУ рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреИрд░-рддреБрдЪреНрдЫ рдФрд░ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ рдПрдХ рд╕реБрд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреА рджрдпрд╛ рдкрд░ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реНрддрд░ рдорд╛рдирдХ рдпрд╛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рдЙрддреНрдкрд╛рдж рд╕реНрд╡рдпрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡рд░реНрдЧ рдореЗрдВ рд╕рднреА рд╕рдХреНрд░рд┐рдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╡реЗ рдСрдмреНрдЬрд╝рд░реНрд╡реНрдпреВрдлрд╝реЛрд░рдХреЗрдпрдкреИрде рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реБрдП рд╣реИрдВ рдФрд░ рд╕рд╣реА рд╕рдордп рдкрд░ рдмрдВрдж рд╣реЛ рдЧрдП рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ (рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛, рдЬреЛрдбрд╝рдирд╛, рд╣рдЯрд╛рдирд╛ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛) рдФрд░ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдЕрд╡рд▓реЛрдХрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреБрдкрдпреЛрдЧреА рдЕрд╡рд▓реЛрдХрди рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ:
*** рдЕрдирдХрд╣рд╛ рдЕрдкрд╡рд╛рдж 'NSRangeException' рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдкреНрддрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди,
рдХрд╛рд░рдг: 'рдкреНрд░реЗрдХреНрд╖рдХ <ETRAdvancedDocumentCell 0x1566cdd0> рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд╕рдХрддрд╛
рдореБрдЦреНрдп рдкрде "document.title" рдХреЗ рд▓рд┐рдП <ETRAdvancedDocumentCell 0x1566cdd0> рд╕реЗ
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИред '
рдЖрдк рдЕрдХреНрд╕рд░ UIViewControllers рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдПрдХ рддрд░реАрдХреЗ ViewDidLoad, vewDidUnload, viewWillAppear, viewDidAppear, viewWillAppisappear рдпрд╛ viewDidDisappear рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрдж рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рдХреЛ рджреЗрдЦрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдИ рднреА рдЗрди рдХреЙрд▓реЛрдВ рдХреЗ рд╕рдЦреНрдд рдорд┐рд▓рд╛рди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдХрд╕реНрдЯрдо рдХрдВрдЯреЗрдирд░ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдВрдзреЗ рдХреЗ рд╕рд╣рд╛рд░реЗ рдХреЗ рд╕рд╛рдеред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, UINavigationController рд╕реНрдЯреИрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рдХреЙрд▓реЛрдВ рдХрд╛ рддрд░реНрдХ рдЖрдИрдУрдПрд╕ 7 рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЗрд╢рд╛рд░рд╛ рдХреА рд╢реБрд░реВрдЖрдд рдХреЗ рд╕рд╛рде рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдЗрди рдХреЙрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЧрдВрднреАрд░рддрд╛
рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕реЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ
рд╣реИрдВ :
@try { [self.document removeObserver:self forKeyPath:@"isFavorite" context:DocumentCellIsFavoriteContext]; } @catch (NSException *exception) {}
рдЬрдм рдореБрдЭреЗ рдРрд╕рд╛ рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖрддрд╛ рд╣реИ рдХрд┐ рдмрдЪрдкрди рдореЗрдВ рдореИрдВрдиреЗ Visual Basic рдореЗрдВ "рдСрди рдПрд░рд░ рд░рд┐рдЬреНрдпреВрдореЗ рдиреЗрдХреНрд╕реНрдЯ" рд▓рд╛рдЗрди рдХреИрд╕реЗ рд▓рд┐рдЦреА рдереА, рдФрд░ рдореЗрд░реА "рдХреГрддрд┐рдпреЛрдВ" рдХреЛ рдЪрдорддреНрдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧрд┐рд░рдирд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рдерд╛ред
рдЙрди рд╕рднреА рд╕реЗ рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдХреЗрд╡реАрдУ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдХрдиреАрдХ рд╣реИ, рдЬрд┐рд╕рдХреА рдкрд╣реБрдВрдЪ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ рдЬреЛ рди рдХреЗрд╡рд▓ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдШрд╛рддрдХ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рднреАрддрд░ рд╕рднреА рдХрдорд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдФрд░ рдмреЗрдЕрд╕рд░ рдХрд░рддрд╛ рд╣реИред
рдХреЗрд╡реАрдУ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдирд┐рд╖реНрдХрд╛рд╕рди рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдЬрдбрд╝ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдПрдХрд▓ рдЕрд╡рд▓реЛрдХрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЦреЛ рджреЗрддрд╛ рд╣реИред "рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЕрд╡рд▓реЛрдХрди" рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдбреЗрд╡рд▓рдкрд░ "рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрд╡рд▓реЛрдХрди" рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ рдХрдИ рдЕрд╡рд▓реЛрдХрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВред рдЕрд╡рд▓реЛрдХрдирд╡рд▓реНрд▓реБрдлрд╝реЛрд░рдХреЗрдкрд╛рде рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рднреА рдпрд╣реА рдмрд╛рдд рд╣реЛрддреА рд╣реИ: рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрджрд░реНрдн рднреА рдЕрд╡рд▓реЛрдХрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдорд╛рди рдкреНрд░реЗрдХреНрд╖рдХ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреА рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрд╡рд▓реЛрдХрди рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдФрд░ рдореБрдЦреНрдп рдкрде, рдЗрди рджреЛ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рд╡рд┐рд░рд╛рд╕рдд рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рднреА рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдХреЗрд╡реАрдУ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ (рдЬреЛ рдХрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рд╡рд╕реНрддреБ рдХреЗрд╡реАрдУ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╣реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реИред
рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ KVO рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рддреН рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдЕрд╡рд▓реЛрдХрди рдХреЛ рдкрд╣рдЪрд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдорд╛рдирдХ KVO рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рдареАрдХ рдПрдХ рдХреАрдкрд╛рде рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдХреЗ, рдФрд░ рдЗрд╕ рдЕрд╡рд▓реЛрдХрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЬреАрд╡рдирдХрд╛рд▓ рд╕реЗ рдЬреЛрдбрд╝рдХрд░, рдЗрд╕ рд╡рд╕реНрддреБ рдХреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЦрддрд░реЛрдВ рд╕реЗ рдордЬрд╝рдмреВрддреА рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рджреЗрдЦреЗ рдЧрдП рдореВрд▓реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХреЗрд╡рд▓ рдпрд╣реА рдХрд░реЗрдЧрд╛ рдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрдВрдЧрд┐рдд рдкрд╣рд▓реЗ рддреАрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЖрдЗрдП рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
@interface ETRKVO : NSObject @property (nonatomic, unsafe_unretained, readonly) id subject; @property (nonatomic, copy, readonly) NSString *keyPath; @property (nonatomic, copy) void (^block)(ETRKVO *kvo, NSDictionary *change); - (id)initWithSubject:(id)subject keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(void (^)(ETRKVO *kvo, NSDictionary *change))block; - (void)stopObservation; @end static void* ETRKVOContext = &ETRKVOContext; @implementation ETRKVO - (id)initWithSubject:(id)subject keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(void (^)(ETRKVO *kvo, NSDictionary *change))block { self = [super init]; if (self) { _subject = subject; _keyPath = [keyPath copy]; _block = [block copy]; [subject addObserver:self forKeyPath:keyPath options:options context:ETRKVOContext]; } return self; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == ETRKVOContext) { if (self.block) self.block(self, change); }
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди
ReactiveCocoa рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдХреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ рдкреБрд░рд╛рдиреЗ
MAKVONotificationCenter рдореЗрдВ ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, NSNotificationCenter: iOS 4 рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЧрдП рдереЗ,
addObserverForName: рдСрдмреНрдЬреЗрдХреНрдЯ: рдХрддрд╛рд░: usingBlock : рдкрджреНрдзрддрд┐ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред
ETRKVO рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦрдХрд░ рдФрд░ рддрд░реНрдХреЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
NSKeyValueObservesOptions рдПрдХ рдмрд┐рдЯрдорд╛рд╕реНрдХ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЭрдВрдбреЗ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- NSKeyValueObservingOptionNew
- NSKeyValueObservingOptionOld
- NSKeyValueObservingOptionInitial
- NSKeyValueObservingOptionPrior
рдкрд╣рд▓реЗ рджреЛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рджреЗрдЦреЗ рдЧрдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдореВрд▓реНрдп рдкрд░рд┐рд╡рд░реНрддрди рддрд░реНрдХ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдорд╛рдореВрд▓реА рдордВрджреА рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХреЛрдИ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░реНрджрд┐рд╖реНрдЯ NSKeyValueObservesOptionInitial рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рдСрдмреНрдЬрд░рд╡реИрд▓реНрдпреВ рдлрд╝реЛрд░рдХреЗрдпрдкрд╛рде рдХреЛ рддреБрд░рдВрдд рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЕрд╡рд▓реЛрдХрди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓ рд░рд╣рд╛ рд╣реИ, рдмреЗрдХрд╛рд░ рд╣реИред
NSKeyValueObservesOptionPyer рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ obserValueForKeyPath рдХреЛ рди рдХреЗрд╡рд▓ рдореВрд▓реНрдп рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирдпрд╛ рдорд╛рди рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА NSKeyValueObservesOptionNew рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ "рдмреИрд╕рд╛рдЦреА" рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╣рдореЗрд╢рд╛ рд╡рд┐рдХрд▓реНрдк (NSKeyValueObservesOptionNew | NSKeyValueObservesOptionOld) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддрд░реНрдХ (NSDictionary *) рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:
- NSKeyValueChangeNewKey
- NSKeyValueChangeOldKey
- NSKeyValueChangeKindKey
- NSKeyValueChangeIndexesKey
- NSKeyValueChangeNotificationIsPriorKey
рдкрд╣рд▓реЗ рджреЛ рдореЗрдВ рд╡рд╣реА рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдореВрд▓реНрдп рд╣реИрдВ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди NSNumber рдпрд╛ NSValue рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдиреАрд▓ рдХреА рдмрдЬрд╛рдп рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ [NSNull null] рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рддреЗ рд╕рдордп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИредрдЕрдВрддрд┐рдо рдХреБрдВрдЬреА рдХреЗрд╡рд▓ NSKeyValueObservesOptionPption рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЧрдП рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЙрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИредрдЗрд╕рд▓рд┐рдП, рдЖрдк рдХреЗрд╡рд▓ рдХреБрдВрдЬреА NSKeyValueChangeNewKey рдФрд░ NSKeyValueChangeOldKey рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд░реВрдк рдореЗрдВ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЗрд╕рд▓рд┐рдП, ETRKVO рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: - (id)initWithSubject:(id)subject keyPath:(NSString *)keyPath block:(void (^)(ETRKVO *kvo, id oldValue, id newValue))block { self = [super init]; if (self) { _subject = subject; _keyPath = [keyPath copy]; _block = [block copy]; [subject addObserver:self forKeyPath:keyPath options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:ETRKVOContext]; } return self; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == ETRKVOContext) { if (self.block) { id oldValue = change[NSKeyValueChangeOldKey]; if (oldValue == [NSNull null]) oldValue = nil; id newValue = change[NSKeyValueChangeNewKey]; if (newValue == [NSNull null]) newValue = nil; self.block(self, oldValue, newValue); } }
рдЪреВрдБрдХрд┐ рдХреАрдкрд╛рде рдкреНрд░рд╛рдпрдГ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЧреЙрдЯрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреАрдкрде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдЧреЗрдЯрд░ рдХреЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдХрд╛рдо рдХрд░реЗрдЧреА, рдФрд░ рдпрд╣ рд▓рд┐рдЦрддреЗ рд╕рдордп рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдкрд░ рдЧрд▓рддреА рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛрдЧреАред - (ETRKVO *)observeSelector:(SEL)selector withBlock:(void (^)(ETRKVO *kvo, id oldValue, id newValue))block { return [[ETRKVO alloc] initWithSubject:self keyPath:NSStringFromSelector(selector) block:block]; }
рдЗрд╕ рд╡рд░реНрдЧ рдФрд░ рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ @interface ETRDocumentCell () @property (nonatomic, strong) ETRKVO* isFavoriteKVO; @property (nonatomic, strong) ETRKVO* titleKVO; @end @implementation ETRDocumentCell - (void)awakeFromNib { [super awakeFromNib]; typeof(self) __weak weakSelf = self; self.isFavoriteKVO = [self observeKeyPath:@"document.isFavorite" withBlock:^(ETRKVO *kvo, id oldValue, id newValue) { weakSelf.isFavoriteButton.selected = weakSelf.document.isFavorite; }]; self.titleKVO = [self observeKeyPath:@"document.title" withBlock:^(ETRKVO *kvo, id oldValue, id newValue) { weakSelf.titleLabel.text = weakSelf.document.title; }]; } - (void)dealloc { [self.isFavoriteKVO stopObservation]; [self.titleKVO stopObservation]; } - (void)toggleIsFavorite { self.document.isFavorite = !self.document.isFavorite; } @end @interface ETRAdvancedDocumentCell () @property (nonatomic, strong) ETRKVO* advancedIsFavoriteKVO; @end @implementation ETRAdvancedDocumentCell - (void)awakeFromNib { [super awakeFromNib]; typeof(self) __weak weakSelf = self; self.advancedIsFavoriteKVO = [self observeKeyPath:@"document.isFavorite" withBlock:^(ETRKVO *kvo, id oldValue, id newValue) { [weakSelf updateBackgroundColor]; }]; } - (void)dealloc { [self.advancedIsFavoriteKVO stopObservation]; } ...
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде ETRKVO рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╕реНрдореГрддрд┐ рд▓реАрдХ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдордЬреЛрд░ рд╣реИред рдпрджрд┐ рдмреНрд▓реЙрдХ рдПрдХ рдордЬрдмреВрдд рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдпрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдордЬрдмреВрдд рд▓рд┐рдВрдХ рдЪрдХреНрд░ рдмрди рдЬрд╛рдПрдЧрд╛: ETRDocumentCell тЖТ isFavoriteKVO тЖТ рдмреНрд▓реЙрдХ тЖТ ETRDocumentCellред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрджрдд рдмрди рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредрдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ ETRKVO рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдирдХреЗ рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реЗ рд╕реНрд╡рдпрдВ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ), рдФрд░ рдЬрдм рд▓рд┐рдВрдХ рдХреА рдЧрд┐рдирддреА рд╣реЛрддреА рд╣реИ рддреЛ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдЬреИрд╕реЗ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рд▓рд┐рдВрдХ рдСрдЯреЛрд░реЗрд▓рд┐рдЬрд╝ рдореЗрдВ рд╣реЛрдиреЗ рдкрд░ рддреБрд░рдВрдд рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреВрд▓редрдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ ETRKVO рд╕реЗ рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ stopObservation рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдСрдмреНтАНрдЬреЗрдХреНтАНрдЯ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рд▓реЛрдХрдиреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕рдХреЗ рд╕реЗрдЯрд░ рдореЗрдВ рд╕реНрдЯреЙрдкрдСрдмреНрдЬрд░реНрд╡реЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред - (void)setIsFavoriteKVO:(ETRKVO *)isFavoriteKVO { [_isFavoriteKVO stopObservation]; _isFavoriteKVO = isFavoriteKVO; } - (void)dealloc { self.isFavoriteKVO = nil; }
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдореИрдиреБрдЕрд▓ рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╢рд┐рдерд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ рдПрдХ рдЕрдиреБрдкрд╛рд▓рди рддрд░реАрдХреЗ рд╕реЗ рдХрдордЬреЛрд░ рдХреЗрд╡реАрдУ рд▓рд┐рдВрдХ рдХреЛ рд╢реВрдиреНрдп рдХрд░ рд╕рдХрддреА рд╣реИ, рддрд╛рдХрд┐ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдИрдУрдПрд╕ 7 рдореЗрдВ, рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдЖрдк "рдЧрдВрджреЗ рдЪрд╛рд▓" рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдбреАрд▓реЙрдХ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ )редрдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВрдбрд▓рд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЙрд╕реА рдзрд╛рдЧреЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИред рд╡рд╕реНрддреБ рд╣реИ, рдЬреЛ рдПрдХ рдФрд░ рдзрд╛рдЧреЗ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╛рдпрдЬрд╝, рдФрд░ рд╕реВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╕рдВрдмрдВрдз рдХреА рдирд╣реАрдВ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЕрд╡рд▓реЛрдХрди, рддреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдЖрдо рддреМрд░ рдкрд░ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП dispatch_asyncред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмрд╛рд╣рд░реА рдмреНрд▓реЙрдХ рдордЬрдмреВрдд рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдзрд╛рд░рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, UIView, UIViewController рдпрд╛ NSManagedObject) рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рддрдерд╛рдХрдерд┐рдд рдбреАрд▓рд▓реЛрдХреЗрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ редрдпрджрд┐ рд╣реИрдВрдбрд▓рд░ рдЖрдЧ рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИ рдЬрдм рдордирд╛рдпрд╛ рдореВрд▓реНрдп рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдордирд╛рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗрд╡реАрдУ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рд╣реИред рдХреЗрд╡реАрдУ рдХрдВрдкреНрд▓рд╛рдпрдВрд╕ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░рд┐рдВрдЧ рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдХреАрдЬрд╝ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП ред рдпрд╣ рдЕрд▓рдЧ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рдЖрдк рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ (рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд) рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реЗрдЯрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдВрдкрддреНрддрд┐ KVO рдХреЗ рдЕрдиреБрд░реВрдк рд░рд╣реЗрдЧреАредрдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЗрд╡реАрдУ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЦрддрд░реЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдиреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдмреЗрдЕрд╕рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЗрд╡реАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА рддрдХрдиреАрдХ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ "[рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдирд╛рдо] рдирд░рдХ" рдирд╛рдордХ рдПрдХ рдШрдЯрдирд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдХреЗрд╡реАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдмрд╣реБрдд рдХрдордЬреЛрд░ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реБрдП, рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдХреЗрд╡реАрдУ рдирд░рдХ" рдХреЛ рдЕрд╡рд▓реЛрдХрди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣рд┐рдорд╕реНрдЦрд▓рди рдХреА рддрд░рд╣ рдЯреНрд░рд┐рдЧрд░ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЪрдХреНрд░реАрдп рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЪрдХреНрд░реАрдп рдХреЙрд▓ рдореЗрдВ рднреАред- рдирд╡рдВрдмрд░ 2013 рдХреЗ рд▓рд┐рдП TIOBE рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрдореНрдпреБрдирд┐рдЯреА рдЗрдВрдбреЗрдХреНрд╕
- рдХреА-рд╡реИрд▓реНрдпреВ рдХреЛрдбрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб
- рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЕрд╡рд▓реЛрдХрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб
- рдмреНрд▓реЙрдХрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рд╖рдп
- рдПрдЖрд░рд╕реА рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг
- Concepts in Objective-C Programming: Delegates and Data Sources
- Programming with Objective-C: Working with Protocols
- Concepts in Objective-C Programming: Target-Action
- stackoverflow: How to cancel NSBlockOperation
- Notification Programming Topics
- NSKeyValueObserving Protocol Reference
- iOS Debugging Magic
- NSHipster: Key-Value Observing
- ReactiveCocoa
- MAKVONotificationCenter
- Weak properties KVO compliance
- Method Swizzling
- Grand Central Dispatch (GCD) Reference
- Simple and Reliable Threading with NSOperation