рдирд┐рд░рдВрддрд░рддрд╛ рдпрд╣рд╛рдБ рдкрдврд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИ
habrahabr.ru/post/170265рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд┐рдХрд╛рд╕ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдЬреИрд╕реА рдЕрджреНрднреБрдд рднрд╛рд╖рд╛ рдХреЛ рдЬрд╛рдирдирд╛ рдерд╛ред Google рдХреЗ рдЧреЗрдЯрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ рдЖрдпрд╛:
Button.OnClickListener mTakePicSOnClickListener = new Button.OnClickListener() { @Override public void onClick(View v) { } };
рдПрдХ OnClickListener рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдЗрд╕рдХреА onClick рд╡рд┐рдзрд┐ (рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕рд╣реА рдХрд░реЗрдВ) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ред рд╣рдореНрдо, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ, рдФрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ) рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА!) рдФрд░ рднреВрд▓ рдЧрдпрд╛ рдпрд╣ рд╕рдм рддрдм рддрдХ рд╣реИ ... рдЬрдм рддрдХ рд╡рд╣ рдмрд╛рд░рд┐рд╢ рдХреЗ рдореМрд╕рдо рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдмрд╕ рдореЗрдВ рдирд╣реАрдВ рдерд╛ред рдмрд╣реБрдд рд╕рдордп рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рдерд╛? рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:
tableView1.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){ NSLog(@"selected row %i", ip.row); }] tableView2.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){ NSLog(@"selected row %i", ip.row); }]
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдФрд░ tableView рдореВрд▓ рд░рд╣рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗред
рдЙрд╕реА рдЬрдЧрд╣, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣
рд╕реЗ рдЙрджреНрджреЗрд╢реНрдпрдкреВрд░реНрдг рд╕реА-рд░рдирдЯрд╛рдЗрдо рдХреЗ
рд╕рдореГрджреНрдз рдЖрдВрддрд░рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдерд╛ред
рдФрд░ рд╣рд╛рдБ, рдЙрд╕реА рдЬрдЧрд╣ рдиреЗ рдореБрдЭреЗ рдирд┐рд░рд╛рд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЙрджрд╛рд╣рд░рдг
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдереЛрдбрд╝рд╛ рдХрдо рдмрддрд╛рдКрдВрдЧрд╛
1) рдирд╡ рдирд┐рд░реНрдорд┐рдд UIViewContoller'a рдХреЗ рд▓рд┐рдП viewWillApear рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛
UIViewController* vc = [[UIViewController new] overrideMethod:@selector(viewWillAppear:) blockImp:^id(UIViewController* selfVC, BOOL anim) { selfVC.view.backgroundColor=[UIColor redColor];
2) UITableViewDataSource рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
3) рдЬрд╛рд╡рд╛ рдХреА рддрд░рд╣ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдПрдХ рдпреЛрдЬрдирд╛ рдереА:
- рдЪрдпрдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рд╡рд┐рдзрд┐)
- рдЙрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (IMP) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред рдмреЗрд╢рдХ, рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд╕реНрдЯрд╛рдЗрд▓рд┐рд╢ рдФрд░ рдлреИрд╢рдиреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдЕрдм
- ...
- рд▓рд╛рдн
рдореВрд░реНрдЦ, рдореИрдВ рдХрд┐рддрдирд╛ рднреЛрд▓рд╛ рдерд╛ред
# 1 рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
рдпрд╣рд╛рдБ рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдПрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд╣реИ:
- рдПрд╕рдИрдПрд▓ - рдЪрдпрдирдХрд░реНрддрд╛, рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо
- рдЫреЛрдЯрд╛ рд╕рд╛ рднреВрдд рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдирд┐рдпрдорд┐рдд рд╕реА рдлрд╝рдВрдХреНрд╢рди
- method_types - рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрд╕ рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛ рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИред
рдЪреВрдВрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЗрд╕рд▓рд┐рдП рдЖрдИрдПрдордкреА рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, Apple рдХрд╛ рдкреНрд░рд▓реЗрдЦрди рдмрд╣реБрдд рд╕рддрд╣реА рдерд╛ред рдЗрд╕
рдкреЗрдЬ рдкрд░ рдЖрдИрдПрдо рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╕рднреА:
рдПрдХ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рддрд░реНрдХ рд▓реЗрддреА рд╣реИ - рд╕реНрд╡ рдФрд░ _cmdред рдЖрдк рдлрд╝рдВрдХреНрд╢рди class_addMethod рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
рдФрд░ рджреГрд╢реНрдп рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг
- (рд╢реВрдиреНрдп) рд╡рд┐рдзрд┐; рд▓реЗрдХрд┐рди рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ (рдпрд╛ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдирд╛) рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд! рд╕реА-рдлрд╝рдВрдХреНрд╢рди рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╣реИ? рдЗрди рджреЛ рд╕рд╡рд╛рд▓реЛрдВ рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдЕрджреНрднреБрдд
рд▓реЗрдЦ рддрдХ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдорд┐рд▓реЗред Ios 4 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд░рдирдЯрд╛рдЗрдо рдПрдк рдЖрдкрдХреЛ рдмреНрд▓реЙрдХ рд╕реЗ рд╕реАрдзреЗ рдЖрдИрдПрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡реИрд╕реЗ, Apple рдХреЗ рд░рдирдЯрд╛рдЗрдо рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╣реА рд▓реЗрдЦ рд╕реЗ рдЫреЛрдЯрд╛ рд╕рд╛ рднреВрдд рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- C рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ IMP рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ: s- рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдХрд╛ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ (рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛) рдФрд░ _c рд╡рд┐рдзрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИред рдмрд╛рдХреА рд╕рдм рд╡рд┐рдзрд┐ рдХрд╛ рддрд░реНрдХ рд╣реИред
- рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдЯрд╛ рд╕рд╛ рднреВрдд рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдмрд┐рдирд╛ред
-(void)doSomething: void(*doSomethingIMP)(id s, SEL _c); void(^doSomethingBLOCK)(id s); -(void)doSomethingWith:(int)x; void(*doSomethingWithIMP)(id s, SEL _c, int x); void(^doSomethingWithBLOCK)(id s, int x); -(int)doToThis:(NSString*)n withThat:(double)d; int(*doToThis_withThatIMP)(id s, SEL _c, NSString *n, double d); int(^doToThis_withThatBLOCK)(id s, NSString *n, double d);
рдЙрд╕ рд╕рдордп, рдореИрдВ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдмреНрд▓реЙрдХ рд╕реЗ рдПрдХ рдЖрдИрдПрдо рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдЖрдИрдПрдо рдХреЛ рдмреНрд▓реЙрдХ рд╕реЗ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рд╕рднреА рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдиреЗ рдЕрднреА рддрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ? рдФрд░ рдХреЗрд╡рд▓ рдпрд╣рд╛рдБ рдореБрдЭреЗ рдЕрдкрдиреА рдЧрд▓рддреА рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ ... рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдКрдВрдЧрд╛:
NSString *str1= @""; [str1 overrideMethod:@selector(intValue) imp:^int(NSString* selfStr){ return 1;}]; NSString *str2= @""; [str2 overrideMethod:@selector(intValue) imp:^int(NSString* selfStr){ return 2;}]; [str1 intValue];
рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмреБрд░рд╛ рд╣реЛрдЧрд╛ ... рдПрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрд░реВ рдореЗрдВ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред
# 2 рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
рдФрд░ рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХреА, "рдирд╛рдЗрдЯ рдореВрд╡" рдмрдирд╛рддреЗ рд╣реБрдПред рдпрд╣ рдПрдХ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреА рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдХреЗ рд╕рд╛рдеред рдФрд░, рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЛ рд░реЛрдХрддреЗ рд╣реБрдП, рдХрдорд╛рдВрдб / рд╡рд┐рдзрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдмрджрд▓реЗрдВред рдЬреЛрдбрд╝реА <рдкрддрд╛> _ <рдкреБрд░рд╛рдиреЗ рдЪрдпрдирдХрд░реНрддрд╛> рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╛рдиреА рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
рдмреЗрд╢рдХ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ред рдпрд╣ рдПрдХ рд╕рдВрджреЗрд╢ рдЕрд╡рд░реЛрдзрди рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдФрд░ рдЕрдм рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?
рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд░реЛрдХрдирд╛ рд╕рдВрднрд╡ рд╣реИ:
- NSProxy рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп
- рдпрджрд┐ рд╡рд╕реНрддреБ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА (рдЧреИрд░-рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЪрдпрдирдХрд░реНрддрд╛)
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, NSObject рдХреЛ рднреЗрдЬреЗ рдЧрдП рдХрд┐рд╕реА рднреА рд╕рдВрджреЗрд╢ рдХреЛ рд░реЛрдХрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рдпрд╛ рдореБрдЭреЗ рдЕрднреА рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ?)ред
NSProxy рд╕реЗ рдПрдХ рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣:
1) рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ
NSString *str1= @""; NSProxy *proxy=[NSProxy proxyWithObject:str1]; [proxy overrideMethod:@selector(intValue) imp:^int(NSString* selfStr){ return 1;}]; [proxy intValue];
2) рдХрднреА-рдХрднреА рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ ApplicationDidBecomeActive рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдкреНрд░реЙрдХреНрд╕реА рд╕реЗ рдЖрд╡рд░рдг рдирд╣реАрдВред рдРрд╕рд╛ рдХреНрдпреЛрдВ? рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕рд╡рд╛рд▓ рд╣реИ ...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSProxy *p=[NSProxy proxyWithObject:self];
рдФрд░ рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рддрдВрддреНрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:
1) NSProxy рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ
2) NSObject рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрд╕рд╛рдЦреА, рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
рдФрд░ рдЪреВрдВрдХрд┐ NSObject рдФрд░ NSProxy рд░реВрдЯ рдХреНрд▓рд╛рд╕ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рдирд╣реАрдВ рдерд╛ред
рдЗрд╕рд▓рд┐рдП, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдХрд┐ NSProxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдирдИ рд╡рд┐рдзрд┐ <рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдбреНрд░реЗрд╕> _ <рд╡рд┐рдзрд┐ рдЪрдпрдирдХрд░реНрддрд╛> рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред
- рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╕рдордп, рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ <рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдбреНрд░реЗрд╕> _ <рдкрджреНрдзрддрд┐ рдЪрдпрдирдХрд░реНрддрд╛>
- рдЕрдЧрд░ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐ рд╣реИ, рддреЛ рдЗрд╕ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдкреНрд░реЙрдХреНрд╕реА рдирд╣реАрдВ) рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдореВрд▓ рдЪрдпрдирдХрд░реНрддрд╛ <рд╡рд┐рдзрд┐ рдЪрдпрдирдХрд░реНрддрд╛> рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
NSObject рдХреЗ рд▓рд┐рдП рдмреИрд╕рд╛рдЦреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
- NSObject рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╢реНрд░реЗрдгреА
- рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдирдИ рд╡рд┐рдзрд┐ <рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдбреНрд░реЗрд╕> _ <рд╡рд┐рдзрд┐ рдЪрдпрдирдХрд░реНрддрд╛> рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред
- рдкреНрд░рдкрддреНрд░ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ <mm_old> _ <рдкрджреНрдзрддрд┐ рдЪрдпрдирдХрд░реНрддрд╛> рднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореВрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЫреЛрдЯрд╛ рд╕рд╛ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рд╣реЛрддрд╛ рд╣реИ
- рдореВрд▓ рд╡рд┐рдзрд┐ "рд╣рдЯрд╛ рджреА рдЧрдИ" рд╣реИ
- рдкреБрд░рд╛рдиреЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╕рдордп, рдЕрдЧреНрд░реЗрд╖рдг рддрдВрддреНрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреБрд░рд╛рдиреА рд╡рд┐рдзрд┐ "рдЪрд╛рд▓реВ" рд╣реИ
- рдлрд╝реЙрд░рд╡рд░реНрдб рдЗрдВрдХреНрд╡рд╛рдпрд░реА рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреНрд▓рд╛рд╕ рдлреЙрд░реНрдо <рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдбреНрд░реЗрд╕> _ <рдореЗрдердб рд╕рд┐рд▓реЗрдХреНрдЯрд░> рдХрд╛ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдлреЙрд░рд╡рд░реНрдб рдЗрдВрдХреНрд╡рд╛рдпрд░реА рдЪреЗрдХ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреНрд▓рд╛рд╕ <mm_old> _ <рдореЗрдердб рд╕рд┐рд▓реЗрдХреНрдЯрд░> рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЕрдиреНрдпрдерд╛ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ [рдЖрддреНрдо doesNotRecognizeSelector: anvat.selector]; - рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреИрд╕рд╛рдЦреА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдЕрдЧреНрд░реЗрд╖рдг рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдкреБрд░рд╛рдиреА рдкрджреНрдзрддрд┐ рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ рдФрд░ рдЕрдЧреНрд░реЗрд╖рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЧрдВрднреАрд░ рдкреНрд░рджрд░реНрд╢рди рд╣рд┐рдЯ рд╣реИред рдФрд░ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛: рдпрджрд┐ рд╣рдо рдПрдирдПрд╕рдПрд╕рдЯреАрд░рд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд▓реНрдпреВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреНрд▓рд╛рд╕ рдлрд┐рд░ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧреАред рдЕрдм, рд╕рднреА NSString рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ intValue рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╕рдордп, mm_old_intValue рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд╝реЙрд░рд╡рд░реНрдбрдЗрдирд╡реЗрд╢рди рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
рд╡реИрд╕реЗ, рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА 2.0 рдиреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдПрдХ рдФрд░ рдмреИрд╕рд╛рдЦреА рдмрдирд╛рдиреА рдкрдбрд╝реАред рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдЯрд╛рдП рдЧрдП рддрд░реАрдХреЗ рдХреЗ рдЖрдИрдПрдо рдХреЛ рдЧреИрд░-рдореМрдЬреВрджрд╛ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдИрдПрдо рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣
IMP forw=class_getMethodImplementation(clas, @selector(methodThatDoesNotExist:iHope:::::)); IMP oldImpl= method_setImplementation(method,forw);
рдпрд╛, рд╕рдордХрдХреНрд╖, _objc_msgForward рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
IMP oldImpl= method_setImplementation(method,(IMP)_objc_msgForward);
рд╣рд╛рдВ, рдЕрдм рд╕рдмрдХреБрдЫ рд╡реИрд╕рд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдордЬрд╝рд╛ рдЖрдк viewControllers, AppDelegatov, рд╕рд┐рд░реНрдл рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рд╕рдм рдХреЛрдб рдХреА рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВред рд▓реЗрдХрд┐рди рддрд░реАрдХреЗ рдЕрд▓рдЧ рд╣реИрдВ: рдХрд╛рд▓реЗ, рдФрд░ рд╕рдлреЗрдж, рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдФрд░
рдирд┐рдЬреА ред рдУрд╣, рдореБрдЭреЗ рдХреБрдЫ рд╣реБрдЖ рд╣реИред
рдкреНрд░рддрд┐рдмрдВрдз
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХреБрдЫ рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:
- рдЖрдк NSObject рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (NSProxy рдФрд░ NSObject рд╢реНрд░реЗрдгреА рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП) рдФрд░ рд╕рд╛рде рд╣реА NSInvokation class (NSObject рд╢реНрд░реЗрдгреА рдХреЗ рд▓рд┐рдП) рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
- рд╕реБрдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдПрдкреА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
- рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рдЬреА рдЧреБрдгреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдПрдкрд┐ рдХреА рдУрд░ рдореБрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рдПрдХ рдмреЗрдИрдорд╛рдиреА рдХреЗ рдХрдЧрд╛рд░ рдкрд░ рдРрд╕реА рдЬреЛрдбрд╝рддреЛрдбрд╝, рд╡реЗ, рдкреВрд░реНрд╡ рдХреА рддрд░рд╣, рдПрдХ рдирд╛рдЬреБрдХ рдорд╛рдорд▓рд╛ рд╣реИред
рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ:
рдЖрд╡рд░рдг MMProxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмреНрдпрд╛рдЬ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде MMProxy рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рд╡рд╕реНрддреБ рдирд╣реАрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
id object; MMProxy *p= [MMProxy proxyWithObject:object]; [object overrideMethod:@selector(onClick:) blockImp:^void(id obj,id sender){ }] ; [p onClick:nil]
рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреНрд░реЙрдХреНрд╕реАрд╡рд┐рдердПрдордУрдмрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
MMProxy *ds = [MMProxy proxyWithMMObject]; [ds addMethod:@selector(numberOfSectionsInTableView:) fromProtocol:@protocol(UITableViewDataSource) isRequired:NO blockImp:^NSUInteger(id object, UITableView* tb) { return 1; }];
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдПрдХ рд╢реНрд░реЗрдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ NSObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдкрд░ рдЬрд╝рд░реВрд░рдд рд╣реИред рдореИрдВ рдкрд╣рд▓реЗ рд╣реА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рдЪреБрдХрд╛ рд╣реВрдВред
рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
- (рдЖрдИрдбреА) рдУрд╡рд░рд░рд╛рдЗрдбрдореЗрдереЛрдб: (рдПрд╕рдИрдПрд▓) рд╕реЗрд▓ рдмреНрд▓реЙрдХрдЖрдИрдПрдордкреА: (рдЖрдИрдбреА) рдмреНрд▓реЙрдХ;
рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╡рд┐рдзрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЪрдпрдирдХрд░реНрддрд╛ рдкрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ), рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- (id) addMethod: (SEL) sel fromProtocol: (рдкреНрд░реЛрдЯреЛрдХреЙрд▓ *) p isRequired: (BOOL) isReq blockImp: (id) рдмреНрд▓реЙрдХ;
рдпрджрд┐ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдЖрддреА рд╣реИ, рддреЛ рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрд╡реЗрджрди рдХрд╛ рдХреНрд╖реЗрддреНрд░
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдпрд╣ рдЧреБрдВрдЬрд╛рдЗрд╢ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рд╣рд╛рдВ, рдпрд╣ рдЬрд░реВрд░реА рд╣реИред рдпрд╣ рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рд╢реВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЗ рд╕рд┐рд░ рдХреЗ рддрд▓ рдХреЛ рднреА рдлрд╛рдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдЦреИрд░, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛
- рдордЬрд╝рд╛
- рдЬрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рд╡рд╣рд╛рдВ рдмреНрд▓реЙрдХ рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, NSProxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрд╣ рдЗрди рд╡рд░реНрдЧреЛрдВ (рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдпрд╛ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, UIAlertViewDelegate, UIActionSheet рдФрд░ tableView рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
- рдбрд┐рдмрдЧрд┐рдВрдЧ
- рдкрд░реАрдХреНрд╖рдг, рдмреЗрд╢рдХ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП OCMock рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреАред
рдХреНрдпрд╛ рдФрджреНрдпреЛрдЧрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВред
рдХрдо рд╕реЗ рдХрдо рдЕрднреА рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рд╣реИред
рдЖрдк рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
github.com/Flanker4/MMMutableMethodsрдкреБрдирд╢реНрдЪ"рдЪреБрдЪреА рдПрдХ рд▓реЗрдЦрдХ рдирд╣реАрдВ рд╣реИ, рдЪреБрдЪреНрдЪреА рдПрдХ рдкрд╛рдардХ рд╣реИред" рд╢рд╛рдпрдж рд▓реЗрдЦ рдмрд╣реБрдд рд╣реА рд╕рдордЭ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЙрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдкреАрдПрдо рд▓рд┐рдЦреЗрдВ, рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред