рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рд░рдирдЯрд╛рдЗрдо рдЗрдирд╕рд╛рдЗрдб

(рдореВрд▓ - рдорд╛рдЗрдХ рдРрд╢, рдпрд╣рд╛рдБ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ )

рдХрдИ рдХреЛрдХреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд░рдирдЯрд╛рдЗрдо рдПрдкреАрдЖрдИ рдХреЗ рдмрдЬрд╛рдп рдЕрд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИред рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдореМрдЬреВрдж рд╣реИ (рдХреБрдЫ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ!), рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЕрдХреНрд╖рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рд╕рднреА рдЬреНрдЮрд╛рди рдЗрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИред

рдЖрдЬ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЛ рд░рдирдЯрд╛рдЗрдо рд╕реНрддрд░ рдкрд░ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╕реНрддреБрдПрдВ


рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреНрдпрд╛ рд╣реИ? рдЖрдЗрдП рдХреБрдЫ рдРрд╕рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NSObject * ред рд╣рдо рдпрд╣ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ + рдЖрд╡рдВрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЙрд▓ + рдЖрд╡рдВрдЯрдирд╡рд┐рдЬреЛрди:ред рд╣рдорд╛рд░реА рд╢реЛрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо NSDefaultMallocZone рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ , рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрд▓реЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИ!

рд▓реЗрдХрд┐рди рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдПрдВ рдХреНрдпрд╛ рд╣реИрдВ? рдЦреИрд░, рдЖрдЗрдП рджреЗрдЦреЗрдВ:
#import <Foundation/Foundation.h> @interface A : NSObject { @public int a; } @end @implementation A @end @interface B : A { @public int b; } @end @implementation B @end @interface C : B { @public int c; } @end @implementation C @end int main(int argc, char **argv) { [NSAutoreleasePool new]; C *obj = [[C alloc] init]; obj->a = 0xaaaaaaaa; obj->b = 0xbbbbbbbb; obj->c = 0xcccccccc; NSData *objData = [NSData dataWithBytes:obj length:malloc_size(obj)]; NSLog(@"Object contains %@", objData); return 0; } 

рд╣рдордиреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдпрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рднрд░ рджрд┐рдпрд╛ред рдлрд┐рд░ рд╣рдордиреЗ рд╕рд╣реА рд▓рдВрдмрд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрд▓реЛрдХ_рд╕рд╛рдЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реБрдкрд╛рдЪреНрдп рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рд╛ рдФрд░ рд╣реЗрдХреНрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NSData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рд╣рдо рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИ:
  2009-01-27 15:58:04.904 a.out[22090:10b] Object contains <20300000 aaaaaaaa bbbbbbbb cccccccc> 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдореЗрдореЛрд░реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рднрд░рддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рдЪрд░ рдП, рдлрд┐рд░ рдЙрд╕рдХрд╛ рд╡рдВрд╢рдЬ рдмреА, рдФрд░ рдлрд┐рд░ рд╕реАред рдпрд╣ рд╕рд░рд▓ рд╣реИ!
рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдореЗрдВ 20300000 рдХреНрдпрд╛ рд╣реИ? рд╡реЗ A рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ NSObject рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ ред рдЖрдЗрдП NSObject рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдЦреЗрдВред
  /*********** Base class ***********/ @interface NSObject { Class isa; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрд░ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрдЧ рдХреИрд╕рд╛ рд╣реИ? рд╣рдо рдЙрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдЬреЛ Xcode рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдФрд░ usr рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ / рдЬрд┐рд╕рдореЗрдВ / objc / objc.h рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рддреЗ рд╣реИрдВ:
  typedef struct objc_class *Class; 

рд╣рдо /usr/include/objc/runtime.h рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:
 struct objc_class { Class isa; #if !__OBJC2__ Class super_class OBJC2_UNAVAILABLE; const char *name OBJC2_UNAVAILABLE; long version OBJC2_UNAVAILABLE; long info OBJC2_UNAVAILABLE; long instance_size OBJC2_UNAVAILABLE; struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; struct objc_method_list **methodLists OBJC2_UNAVAILABLE; struct objc_cache *cache OBJC2_UNAVAILABLE; struct objc_protocol_list *protocols OBJC2_UNAVAILABLE; #endif } OBJC2_UNAVAILABLE; 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреНрд▓рд╛рд╕ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬреЛ ... рдЕрдиреНрдп рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
рдЖрдЗрдП рдПрдХ рдФрд░ рд╡рд░реНрдЧ рджреЗрдЦреЗрдВ, NSProxy
 @interface NSProxy { Class isa; } 

рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИред рдПрдХ рдФрд░ рдЖрдИрдбреА рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддреА рд╣реИ
 typedef struct objc_object { Class isa; } *id; 

рдФрд░ рдлрд┐рд░ рд╕реЗ рдЙрд╕рдиреЗред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рд╣рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдЖрдЗрд╕рд╛ , рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдХреНрдпрд╛ рд╣реИ?
рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рд╛ рдЪрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд╕реНрддреБ рдХрд┐рд╕ рд╡рд░реНрдЧ рдХреА рд╣реИред Objective-C рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЛ isa рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдЗрд╕ рдЫреЛрдЯреЗ рд╕реВрдЪрдХ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИред рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╢реЗрд╖ рдЯреБрдХрдбрд╝рд╛, рдмрд╕ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ BLOB рд╣реИ рдЬреЛ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛рдПрдВ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдХреЛрдИ рдЕрд░реНрде рджреЗ рд╕рдХрддреА рд╣реИрдВред

рдХрдХреНрд╖рд╛рдПрдВ


рддрдм, рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ? рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рд╣рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ "рджреБрд░реНрдЧрдо" рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ (#if рдХреЗ рдмрд╛рдж! __ OBJC2__, рд╡реЗ рдкреВрд░реНрд╡-рддреЗрдВрджреБрдП рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдкреЙрд▓ рддреЗрдВрджреБрдП рдФрд░ рдКрдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ) рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдВ рдХрд┐ рд╡рд╣рд╛рдВ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЫрд┐рдкреА рд╣реБрдИ рд╣реИ)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдИрд╕рд╛ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд┐рд░ рдХрдХреНрд╖рд╛ - рдкреВрд░реНрд╡рдЬ рдХреА рдПрдХ рдХрдбрд╝реА рд╣реИ, рддрд╛рдХрд┐ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рди рд╣реЛред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд╡рд░реНрдЧ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрдд рдореЗрдВ рд╣реИред рдпрд╣ рдЪрд░ рдХреА рдПрдХ рд╕реВрдЪреА, рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдпрд╣ рд╕рдм рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!

рдореИрдВрдиреЗ рдХреИрд╢ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рд╣реЗрд░рдлреЗрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╕рдВрджреЗрд╢ ([рдлреВ рдмрд╛рд░]) рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд░рдирдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЗрд╕реЗ рдЦреЛрдЬрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд░реИрдЦрд┐рдХ рд╕реВрдЪреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рд▓рдВрдмреА рд╣реИред рдХреИрд╢ рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреБрд▓рд╛рдП рдЧрдП рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╕рднреА рдмрд╛рдж рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдВрдмреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рд░рдирдЯрд╛рдЗрдо рдХреА рдЦреЛрдЬ рдХрд░рдХреЗ, рдЖрдк рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдмреБрдирд┐рдпрд╛рджреА objc_ рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ , class_ рдкрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП class_getInstanceMethod рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рддрд░реНрдХ рд╕реВрдЪреА / рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ред рдпрд╛ рдЖрдк class_addMethod рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рддреБрдо рднреА рд╕рд╣реА рд╕рдордп рдкрд░ objc_allocateClassPair рдХреЗ рд╕рд╛рде рдкреВрд░реА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ!

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ


рдЗрд╕ Runtime рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдпреЛрдЧ рд╣реИрдВ, рдмрд╕ рдХреБрдЫ рд╣реА
  1. рдЪрд░ / рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЦреЛрдЬред Apple рдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдХреА-рд╡реИрд▓реНрдпреВ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ: рдЖрдк рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдкрдХреЛ рдПрдХ рдЪрд░ рдпрд╛ рддрд░реАрдХрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдРрдкреНрдкрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИрдВред ( рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХреЛрдХреЛ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдХреБрдВрдЬреА-рдореВрд▓реНрдпред )
  2. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд / рдХреЙрд▓ рдХрд░реЗрдВред Objc_getClassList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╡рд░реНрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рдж, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ рдХреМрди рд╕реЗ рдЙрдкрд╡рд░реНрдЧ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдЙрди рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдВрдЧреЗ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдВ, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдердХрд╛рдК рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рдЙрди рд╕рднреА рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
  3. рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣ рдпреВрдирд┐рдЯ-рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред # 2 рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡ рддрд░реАрдХреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде, рдПрдХ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдкрд░ рдирд╣реАрдВ
  4. рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рддрд░реАрдХрд╛ред рд░рдирдЯрд╛рдЗрдо рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  5. рдмреНрд░рд┐рдЬрд┐рдВрдЧ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдФрд░ рдПрдХ рдФрд░ (рдХрд╛рдлреА рдЧрддрд┐рд╢реАрд▓) рднрд╛рд╖рд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдкреБрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
  6. рдФрд░ рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрдзрд┐рдХ! рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдКрдкрд░ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╕реАрдорд┐рдд рди рдХрд░реЗрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдСрд▓-рдЗрди-рд░рд╛рдЙрдЯрд┐рдВрдЧ рд░рдирдЯрд╛рдЗрдо рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдирд┐рднрд╛рдИ рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╕рдм рд╕реА рдХреЛрдб рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЦреБрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИрдВред

(рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ - рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЗ рдЗрд╕ рд╕рднреА рдЕрдирдВрдд рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдорд╛рдЗрдХ рдПрд╢ рдиреЗ рдЧрд┐рдЯрд╣рдм рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреЛрд╕реНрдЯ рдХреА - рдЬреЛ рдХрд┐ рдУрд╡рд░рдЯрд╛рдЗрдо рдХреЗ рдмрд╛рдж рдПрдХ рд░реИрдкрд░ рд╣реИред рдпрд╣ рд╕рднреА рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рддрдХ рдкреВрд░реА рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдЪрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВред)

Source: https://habr.com/ru/post/In148922/


All Articles