рдЯреИрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдХреЗрдд, рдпрд╛ рдПрдХ рдЕрдВрддрд░ рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдХреИрд╕реЗ рдлрд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП

рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ NSNumber рдХреНрд▓рд╛рд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рд░реИрдкрд░ рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирдВрдмрд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдкреНрд░рдкрддреНрд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рднрд░рд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд░рдгреА рдмрдирд╛рдирд╛ рд╣реИ [NSNumber numberWithInt: someIntVideue]; ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рд╕рдВрдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ, рдлрд┐рд░ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░реЗрдВ рдпрджрд┐ рд╣рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдЫреЛрдЯреЗ рдЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? Apple рдиреЗ рднреА рдРрд╕рд╛ рд╕реЛрдЪрд╛ рдерд╛, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ NSNumber рдЕрдХреНрд╕рд░ рдПрдХ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рд╕реВрдЪрдХ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ ... рд╢реВрдиреНрдпрддрд╛ред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдФрд░ рдЪрд┐рд╣реНрдирд┐рдд рд╕рдВрдХреЗрддрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░реЗрдВ!


рд╕реВрдЪрдХ рд╕рдВрд░реЗрдЦрдг рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╕рд╛


рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реВрдЪрдХ рдПрдХ рдирд┐рдпрдорд┐рдд рдЗрдВрдЯ рд╣реИ, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдкрддреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрддрд╛ рд╣реИред рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдЪрд░ 0x7f84a41000c0 рдлреЙрд░реНрдо рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯ рд╣реИред "рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ" рдХреА рдкреВрд░реА рдкреНрд░рдХреГрддрд┐ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рд╕реА рдореЗрдВ, рд╣рдо рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЗрдВрдЯ рд╡реИрд▓реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
void *somePointer = ...; uintptr_t pointerIntegerValue = (uintptr_t)somePointer; 

( uintptr_t рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рд╕рд░рдгреА рдЯрд╛рдЗрдкрдбрд┐рдлрд╝ рд╣реИ рдЬреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЖрдХрд╛рд░ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)

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

рдпрджрд┐ рдЖрдк рдПрдХ рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рдХ рд╕рдВрд░реЗрдЦрдг рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
  void f(void) { int x; } 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдЗрддрдиреА рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИрдВ:

  int *ptr = malloc(sizeof(*ptr)); 

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

рд╕рдВрд░реЗрдЦрдг рдХреЗ рдХрд╛рд░рдг, рдЕрдкреНрд░рдпреБрдХреНрдд рдмрд┐рдЯреНрд╕ рд╕реВрдЪрдХ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ 16 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЗрдХреНрд╕ рдкреЙрдЗрдВрдЯрд░ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
  0x-------0 

рд╣реЗрдХреНрд╕ рдХрд╛ рдЕрдВрддрд┐рдо рдЕрдВрдХ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдз рд╕реВрдЪрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд╛рд░ *) рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдмрд▓ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд


рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЦрд╛рд▓реА рдмрд┐рдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛, рдЖрдк рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрд╡реЗрджрди рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдХреЗрддрдХ рдирд╣реАрдВ рд╣реИ? рддрдм рд╣рдо рдорд╣рдВрдЧреА рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдбреЗрдЯрд╛ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд╣реА рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рд╛рдВ, рд╣рд╛рдВ, рдпреЗ рд╡рд╣реА рдЪрд┐рд╣реНрдирд┐рдд рд╕рдВрдХреЗрдд рд╣реИрдВред

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

рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдПрдХ рд╡реИрдз рдмрд╛рдЗрдирд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
 ....0000 ^    

рдФрд░ рдпрд╣ рдПрдХ рдЪрд┐рд╣реНрдирд┐рдд рд╕реВрдЪрдХ рд╣реИ:
 ....xxx1 ^    


рдпрд╣ рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рд▓реЗрдмрд▓ рд╕реВрдЪрдХ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓реЗ рддреАрди рд╕реВрдЪрдХ рд╡рд░реНрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдмрд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ


рдЯреИрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдХреЗрдд рдЕрдХреНрд╕рд░ рдЙрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдПрдХ рд╡рд╕реНрддреБ рд╣реИред рд╕рдВрдЧрддрд┐, рдЬрдм 3 рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдФрд░ 3 + 4 рдореЗрдВ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рддреАрд╕рд░рд╛ рднреА рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрдирд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдЙрдкрджреНрд░рд╡, рдзреАрдореА рд╕реНрдореГрддрд┐ рддрдХ рдкрд╣реБрдВрдЪ, рдХрд┐рд╕реА рдРрд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рд╛рдЧрдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИред

рд▓реЗрдмрд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрдВ рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рдкреНрд░рддрд┐рдХреВрд▓рддрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реАрдВ рдЦрд╛рд▓реА рдмрд┐рдЯреНрд╕ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред рдЫреЛрдЯреЗ ints рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИрдВ - рд╡реЗ рдмрд╣реБрдд рдХрдо рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддрд┐рдХрдбрд╝реА рд╣реИ:
 0000 0000 0000 0000 0000 0000 0000 0011 

рдФрд░ рдпрд╣рд╛рдБ рддреАрди рд╕реВрдЪрдХ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ:
  0000 0000 0000 0000 0000 0000 0011 1011 ^ ^ ^   | | |    (5) |   

рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдкрд╛рдБрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рд╕рдм рдХреБрдЫ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдкрд╛рдардХ рдиреЗ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреЗрд╡рд▓ 28 рдмрд┐рдЯреНрд╕ рдмрдЪреЗ рд╣реИрдВ рдФрд░ 64-рдмрд┐рдЯ рдкрд░ 60 рдмрд┐рдЯреНрд╕ рд╣реИрдВред рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╣рд╛рди рдореВрд▓реНрдпреЛрдВ рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╣реА рд╣реИ, рд╣рд░ рдЗрдВрдЯ рдХреЛ рдПрдХ рд▓реЗрдмрд▓ рд╕реВрдЪрдХ рдореЗрдВ рдЫрд┐рдкрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

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

рд╕реВрдЪрдХ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрд┐рдЯреНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рди рдХреЗрд╡рд▓ рдЗрдВрдЯ, рдмрд▓реНрдХрд┐ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдИ ASCII рд╡рд░реНрдг (64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП 8) рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдПрдХ рд▓реЗрдмрд▓ рд╕реВрдЪрдХ рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ! рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЯреИрдЧ рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХреЗ рднреАрддрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред

рдареАрдХ рд╣реИ, рд╕реБрдВрджрд░ рд╕рд┐рджреНрдзрд╛рдВрдд, рдЪрд▓реЛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ!

рд╣рдо рдЖрдзрд╛рд░ рдХреЛ NSNumber рдХреЗ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ MANumber рд▓реЗрдВрдЧреЗ, рдФрд░ рд╡рд╣рд╛рдВ рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВрдЧреЗред

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рднреА рд╣рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдиреНрд╣реЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рди рд╣реЛред

рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдЬреА _objc_insert_tagged_isa рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ:
  void _objc_insert_tagged_isa(unsigned char slotNumber, Class isa); 

рдЖрдк рдЗрд╕рдореЗрдВ рд╕реНрд▓реЙрдЯ рдирдВрдмрд░ (рдЯреИрдЧ) рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред

рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рдПрдХ рдЬреБрдбрд╝рд╡рд╛рдВ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рднреАрддрд░ рдорд╛рди рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдЧрд╛ред NSNumber рдХреЗ рд▓рд┐рдП, рдпреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ ints рдФрд░ рдпреБрдЧрд▓ рд╣реЛрдВрдЧреЗ, рдЬреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд░рдЯрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

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

рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдВрдШ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
  union Value { long long i; unsigned long long u; double d; }; 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВ рдЬреЛ рдПрдХ рд▓реЗрдмрд▓ рд╕реВрдЪрдХ рдореЗрдВ рд╕реВрдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ - рд╕реНрд▓реЙрдЯ рдирдВрдмрд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд▓рд┐рдпрд╛:
  const int kSlot = 1; 

рдореИрдВрдиреЗ рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ - рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдЧреЗ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
  const int kTagBits = 4; 

рдореВрд▓реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдирдореНрдмрд░ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛:
  const int kTypeBits = 2; 

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

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд┐рддрдиреЗ рдмрд┐рдЯреНрд╕ рд▓рдЧрддреЗ рд╣реИрдВ:
  const int kLongLongBits = sizeof(long long) * CHAR_BIT; 

рдпрд╣рд╛рдВ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд▓рдВрдмрд╛ рд╣реИ, рдореИрдВрдиреЗ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреАред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗред рдкрд╣рд▓реЗ рдПрдХ рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП MANumber рдмрдирд╛рддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ:
  static id TaggedPointer(unsigned long long value, unsigned type) { 

рдореБрдЭреЗ рдЖрдкрдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рд╕реВрдЪрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╣рдореЗрд╢рд╛ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддреАрди рдмрд┐рдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдбреЗрдЯрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рджреЛ рдмрд┐рдЯреНрд╕ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдмрд╛рдж рд╕реНрд╡рдпрдВ рдореВрд▓реНрдпред рдпрд╣рд╛рдВ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ рдЬреЛ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреА рд╣реИ:
  id ptr = (__bridge id)(void *)((value << (kTagBits + kTypeBits)) | (type << kTagBits) | (kSlot << 1) | 1); 

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдЬреАрдм рдбрдмрд▓ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП - рдореИрдВ рдПрдЖрд░рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ , рдФрд░ рд╡рд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдЪрдпрдирд╛рддреНрдордХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЖрдк рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЯреВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ __bridge рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрдВрдЯ рдореЗрдВ рднреА рдЖрдкрдХреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рд╢реВрдиреНрдп * рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдпрд╣ рд╕рдмред

рдпрд╣ рд╕рдм рд╣реИ, рдФрд░ рдЕрдм рдореИрдВ рдирдП рдмрдирд╛рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реВрдВ:
  return ptr; } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪрдХ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╡рд╣ рд╕рднреА рдХрдо-рдСрд░реНрдбрд░ рдмрд┐рдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрд╡рдХреВрдл рдбрдмрд▓ рдХрд╛рд╕реНрдЯ рдХреЗ рдХрд╛рд░рдг, рдЙрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдерд╛ред
  static BOOL IsTaggedPointer(id pointer) { uintptr_t value = (uintptr_t)(__bridge void *)pointer; return value & 1; } 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рд▓реЗрдмрд▓ рд╕реВрдЪрдХ рд╕реЗ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╕реА рдПрдХ рд╕рд╛рде рдХрдИ рдореВрд▓реНрдпреЛрдВ рдХреА рд╡рд╛рдкрд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдИ: рдЗрд╕рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рд╕реНрд╡рдпрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
  struct TaggedPointerComponents { unsigned long long value; unsigned type; }; 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ, рдмрд╣реБрдд рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрдХ рдХреЛ рдЗрдВрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ:
  static struct TaggedPointerComponents ReadTaggedPointer(id pointer) { uintptr_t value = (uintptr_t)(__bridge void *)pointer; 

рдлрд┐рд░ рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЪрд╛рд░ рдмрд┐рдЯреНрд╕ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрджрд▓рд╛рд╡ рджреНрд╡рд╛рд░рд╛ рдорд╛рди рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:
  struct TaggedPointerComponents components = { value >> (kTagBits + kTypeBits), 

рдПрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдПрдХ рдореБрдЦреМрдЯрд╛ рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
  (value >> kTagBits) & ((1ULL << kTypeBits) - 1) }; 

рдирддреАрдЬрддрди, рд╕рднреА рдШрдЯрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
  return components; } 

рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рд╣рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд▓реЗрдмрд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд░ _objc_insert_tagged_isa рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ + рдЖрд░рдВрднрд┐рдХред рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд░рдирдЯрд╛рдЗрдо рдПрдХ рд╕реНрд▓реЙрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╡рд╣рд╛рдВ nil рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╣рдорд╛рд░рд╛ рдирдпрд╛ рд╡рд░реНрдЧ:
  + (void)initialize { if(self == [MANumber class]) { _objc_insert_tagged_isa(kSlot, nil); _objc_insert_tagged_isa(kSlot, self); } } 

рдЕрдм рд╣рдо рд▓реЗрдмрд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдмрдирд╛рдиреЗ рдХреА рдмрд╣реБрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд▓рд┐рдЦреАрдВ: + numberWithLongLong: рдФрд░ + numberWithUnsignedLongLong:ред рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдорд╛рди рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рд╡реЗ рдмрд╕ рд╕рд╛рдзрд╛рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред

рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдмрд▓ рд╕реВрдЪрдХ рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ kLongLongBits - kTagBits - kTypeBits, рдпрд╛ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ 58 рдмрд┐рдЯреНрд╕ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдВрдХреЗрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреБрд▓, рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛ рд▓рдВрдмрд╛ рдореВрд▓реНрдп 57 рдореЗрдВ 2 рд╣реИ, рдиреНрдпреВрдирддрдо -57 рд╣реИред
  + (id)numberWithLongLong: (long long)value { long long taggedMax = (1ULL << (kLongLongBits - kTagBits - kTypeBits - 1)) - 1; long long taggedMin = -taggedMax - 1; 

рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд░рд╣рддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рди рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ рд╣рдо рдЖрд╡рдВрдЯрди / init рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдорд┐рдд рдиреГрддреНрдп рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рд╣рдо рджрд┐рдП рдЧрдП рдорд╛рди рдФрд░ рд╡рд░реНрдЧ INT рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдмрд▓ рд╕реВрдЪрдХ рдмрдирд╛рддреЗ рд╣реИрдВ:
  if(value > taggedMax || value < taggedMin) return [[self alloc] initWithLongLong: value]; else return TaggedPointer(value, INT); } 

рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд▓рдВрдмреА рд▓рдВрдмреА рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрдХреЗрдд рдмрд┐рдЯ рдХреЗ рдХрд╛рд░рдг рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░:
  + (id)numberWithUnsignedLongLong:(unsigned long long)value { unsigned long long taggedMax = (1ULL << (kLongLongBits - kTagBits - kTypeBits)) - 1; if(value > taggedMax) return [[self alloc] initWithUnsignedLongLong: value]; else return (id)TaggedPointer(value, UINT); } 

рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХреНрд╕реЗрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдмрд┐рдЯреНрд╕, рдорд╛рд╕реНрдХ, рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╕ [рд╕реНрд╡рдпрдВ рдкреНрд░рдХрд╛рд░] рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВред рд╡рд╣ рдЬреЛ рднреА рдХрд░реЗрдЧрд╛ рд╡рд╣ IsTaggedPointer рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреЙрдЗрдВрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдЗрд╕реЗ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ ReadTaggedPointer рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрджрд┐ рдкреЙрдЗрдВрдЯрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рддреЛ рдмрд╕ _type:
  - (int)type { if(IsTaggedPointer(self)) return ReadTaggedPointer(self).type; else return _type; } 

рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрд░реНрде рдХрд╛ рдПрдХ рдПрдХреНрд╕реЗрд╕рд░ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реВрдЪрдХ рд╣реИ:
  - (union Value)value { if(!IsTaggedPointer(self)) { return _value; } 

рд▓реЗрдмрд▓ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ ReadTaggedPointer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рди рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд▓рдВрдмрд╛ рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИред
  else { unsigned long long value = ReadTaggedPointer(self).value; 

рд╡рд╛рдкрд╕реА рдорд╛рди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдпреВрдирд┐рдпрди рдорд╛рди рдХрд╛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдмрдирд╛рдПрдБ:
  union Value v; 

рдпрджрд┐ рдпрд╣ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдореВрд▓реНрдп рдХреЛ v рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╣реИ:
  int type = [self type]; if(type == UINT) { vu = value; } 

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд╛рдЗрди рдмрд┐рдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ - рдпрд╣ рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ 57 рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реИ:
  else if(type == INT) { unsigned long long signBit = (1ULL << (kLongLongBits - kTagBits - kTypeBits - 1)); 

рдпрджрд┐ рдмрд┐рдЯ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ 57 рдмрд┐рдЯреНрд╕ рд╡рд╛рд▓реЗ рд╕рднреА рдмрд┐рдЯреНрд╕ рдХреЛ рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рднрд░рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рджрд┐рдП рдЧрдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдПрдХ рд╡реИрдз 64-рдмрд┐рдЯ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд╛рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ: рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд▓реЛрдЧреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдкрд╣рд▓рд╛ рд╢реВрдиреНрдп рдкрд╣рд▓рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
  if(value & signBit) { unsigned long long mask = (((1ULL << kTagBits + kTypeBits) - 1) << (kLongLongBits - kTagBits - kTypeBits)); value |= mask; } 

рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдИрдВ рдУрд░ рд╢реВрдиреНрдп рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВред рддреЛ рдмрд╕ v рднрд░реЗрдВ:
  vi = value; } 

рдпрджрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдЪреАрдЬреЗрдВ рдЦрд░рд╛рдм рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛:
  else abort(); 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд╛рдкрд╕реА v:
  return v; } } 

рдпрд╣ рд╕рдм рдХреЛрдб рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдирдП MANumber рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ accessor рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рднреА рд▓реЗрдмрд▓ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдорд┐рдд MANumber рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдФрд░ isEqual:ред

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


рд▓реЗрдмрд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛрдХреЛ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдврд╝рд┐рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИрдВ, рдЬреЛ рдХрд╛рдо рдХреА рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдирдПрд╕рдПрдирдореНрдмрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореЗрдореЛрд░реА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

(рдорд╛рдЗрдХ рдРрд╢ рд╕реЗ рддрд╛рдЬрд╛ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреНрдпреВ рдПрдВрдб рдП рдХрд╛ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж)
рдЕрджреНрдпрддрди:
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдмрд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдЖрдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рдирд╣реАрдВ рдерд╛ред

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


All Articles