Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c

Objective-C Runtime. ВСория ΠΈ практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Runtime?

Objective-C задумывался ΠΊΠ°ΠΊ надстройка Π½Π°Π΄ языком C, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. ЀактичСски, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синтаксиса, Objective-C β€” это достаточно нСбольшой Π½Π°Π±ΠΎΡ€ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… конструкций Π½Π°Π΄ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ C. ИмСнно Runtime, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, прСдоставляСт Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΄Ρ‹Ρ…Π°ΡŽΡ‚ Π² язык Тизнь, рСализуя Π΅Π³ΠΎ динамичСскиС возмоТности ΠΈ обСспСчивая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ООП.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСн ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ C-структурой. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Objective-C ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ссылку Π½Π° свой класс β€” Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ isa-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π”ΡƒΠΌΠ°ΡŽ, всС Π²ΠΈΠ΄Π΅Π»ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΈ просмотрС структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, класс Ρ‚Π°ΠΊΠΆΠ΅ прСдставляСт ΠΈΠ· сСбя Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ структуру:

Класс Π² Objective-C β€” это ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Ρƒ Π½Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ присутствуСт isa-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° «класс класса», Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ мСтакласс Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Objective-C. Аналогично, Π‘-структуры ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… сущностСй языка:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Runtime-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Π˜Π½Ρ‚Ρ€ΠΎΡΠΏΠ΅ΠΊΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Runtime Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² модСль Π΄Π°Π½Π½Ρ‹Ρ… прСдставляСт собой plain old Objective-C ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ свойств:

2013-05-04 15:54:01.992 Test[40675:11303] COConcreteObject: <
name = Foo;
quantity = 10;
title = bar;
>

БообщСния

БистСма Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Objective-C Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‡Π΅Ρ€Π΅Π· посылку сообщСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° транслируСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ objc_msgSend :

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ динамичСски ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свою Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Если ΠΆΠ΅ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡Π½Π°ΠΌ вас Π½Π΅ устраиваСт β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€Π²Π°Ρ€Π΄ΠΈΠ½Π³ сообщСний.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. Method Swizzling
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. АссоциативныС ссылки

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ извСстным ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ являСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания Π² Π½ΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра. ΠŸΡƒΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π°ΠΌ трСбуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ свойство ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΌΡƒ классу UITableView β€” ссылку Π½Π° Β«Π·Π°Π³Π»ΡƒΡˆΠΊΡƒΒ», которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° пуста:

«Из ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ» этот ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ассоциативных ссылок:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌ. Н. Π­. Π‘Π°ΡƒΠΌΠ°Π½Π°
Bauman National Library

ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ инструмСнты

Objective-C

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π₯арактСристики Objective-C

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Основная Ρ†Π΅Π»ΡŒ языка Objective-C, рСализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² языкС Π‘, ΠΈ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ основной ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Objective-C ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ».

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова @interface, послС Ρ‡Π΅Π³ΠΎ слСдуСт имя класса ΠΈ Ρ‚Π΅Π»ΠΎ класса, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках. Π’ Objective-C всС классы унаслСдованы ΠΎΡ‚ основного класса NSObject. Π­Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс всСх классов Π² Objective-Π‘. Он обСспСчиваСт основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти, инициализация. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния класса Box:

Π§Π»Π΅Π½Ρ‹-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ частными ΠΈ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

ΠžΠ±Ρ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° языкС программирования Objective-C выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° состоит ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ Ρ‚Π΅Π»Π°.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° max(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: num1 ΠΈ num2, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ больший ΠΈΠ· Π½ΠΈΡ…:

Для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² послС ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. НапримСр:

ИспользованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Objective-C

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся ΠΈΠ· класса. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ с Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ основных Ρ‚ΠΈΠΏΠΎΠ². Бвойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° прямого доступа (.). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объявлСния Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Box:

Бвойства

Бвойства вводятся Π² Objective-C для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра класса ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ класса. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свойства:

НаслСдованиС

Objective-C, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ понятиС наслСдования, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСствСнноС наслСдованиС.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ другая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ ΠΎΡ‚ класса «Wiz». Π’ языкС Π‘++, класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅ΠΆΠΈΠΌΡ‹ «public», «protected» ΠΈΠ»ΠΈ «private». ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ контСкста :: (Bar. Wiz::). Π’ Objective-C, класс ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса с использованиСм Ρ€Π΅ΠΆΠΈΠΌΠ° «public». ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова «super», ΠΊΠ°ΠΊ Π² языкС Java.

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² любом классС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт трСбованиям. Класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌΡƒ количСству ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ².

Π’ языкС C++, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ абстрактныС классы ΠΈ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Абстрактный класс Π² Π‘++ являСтся Π±ΠΎΠ»Π΅Π΅ «ΠΌΠΎΡ‰Π½Ρ‹ΠΌ», Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π² Objective-C, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Класс «Foo» Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ mousePressed, mouseClicked ΠΈ keyPressed. Класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован ΠΊΠ°ΠΊ «Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŒ» ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’ Objective-C, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ понятиСм. Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ скобки Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π² Π‘++. Π­Ρ‚ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅Ρ‚ Π² Objective-C.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΈ нСдостатки

Π’ C++, нСсколько ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ сущСствуСт Π² Objective-C. Π’ΠΎΡ‚ список:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Objective-C с нуля

Π‘Π°Π½Π°Π»ΡŒΠ½Π°Ρ тСория возникновСния ООП

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования написанного ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ постоянно заставляСт программистов ΠΈΡΠΊΠ°Ρ‚ΡŒ всС Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π΅Π³ΠΎ упорядочивания, структуризации ΠΈ абстрагирования. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ программирования, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования, Π½ΠΎΠ²Ρ‹Π΅ языки, компиляторы ΠΈ стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊ Π½ΠΈΠΌ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ. Π’Π°ΠΊ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€), рСализуСмая ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ процСссорных ΠΊΠΎΠΌΠ°Π½Π΄ CALL\RET ΠΈ стСка (ΠΏΠΎ сути, пСрСнос ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния ΠΏΠΎ адрСсу ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ, Π° Π½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ). Π—Π°Ρ‚Π΅ΠΌ, ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» – ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° трансляции), ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ²ΡˆΠ°Ρ Π΄Π²ΡƒΡ…ΡΡ‚Π°ΠΏΠ½ΡƒΡŽ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ: компиляция ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° (статичСская ΠΈΠ»ΠΈ динамичСская) Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π’ слСдствии увСличСния объСма ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ слоТностСй Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, с 1960Ρ… Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ новая, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Ρ€Π°Π·Π±ΠΈΠ²ΡˆΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ – Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π•Π΅ ΡΡƒΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π²ΠΎ взаимодСйствии сущностСй (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) посрСдством посылки Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ сообщСний. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ программистом Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ класса). ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… (класса) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π΄Π²ΡƒΡ… Π²Π΅Ρ‰Π°Ρ…: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‡Π»Π΅Π½ΠΎΠ²) ΠΈ Π½Π°Π±ΠΎΡ€Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡ… ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c

Класс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ оформляСтся ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ программистом Ρ‚ΠΈΠΏ, основанный Π½Π° встроСнных (языковых) Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ\ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… классах. Для языка Π‘, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ структура (struct). А Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ рСализуСтся ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ прСимущСством ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° стала Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ классы Π½Π° основС ΡƒΠΆΠ΅ написанных (Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ свои), Π½Π°Π·Π²Π°Π½Π½ΠΎΠ΅ наслСдованиСм.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c

Набор ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² прСдставляСт собой интСрфСйс для взаимодСйствия с ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ. ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСпосрСдствСнной ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… класса (Π±Π΅Π· задСйствования Π΅Π³ΠΎ интСрфСйса) ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ инкапсуляции. На рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½ класс ΠΈ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ x Ρ‚ΠΈΠΏΠ° float ΠΈ ΠΊ Π½Π΅ΠΌΡƒ интСрфСйс (ΠΌΠ΅Ρ‚ΠΎΠ΄) doubleX, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

Π‘Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сообщСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° Π½Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ (Ρ‚.Π΅. Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»), Π½ΠΎ, ΠΏΠΎ ситуации, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ класс этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° нСизвСстСн. НапримСр, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту списка ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Auto Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сообщСниС Move, Π° извСстно Ρ‡Ρ‚ΠΎ Π² спискС находятся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ класса Auto, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ (наслСдованныС) классы Ford ΠΈ Subaru. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ благодаря ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ посылкС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ сообщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈΠ· Π½Π΅ΠΊΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ способны ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ сообщСниС, этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ соотвСтствСнно своСму, Π° Π½Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ для Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классу.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ языком с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° стал Simula67. Π—Π°Ρ‚Π΅ΠΌ появился Smalltalk. А Π² 80Ρ… Π½Π°Ρ‡Π°Π» ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒΡΡ Π‘++ β€” основной язык соврСмСнного систСмного программирования. Π•Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ Π² 90Ρ… ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ»ΠΎ ряд ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ ΠΈ шаблонов проСктирования, ΠΈ ΠΎΠΊΠ°Π·Π°Π»ΠΎ Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎΠ΅ влияниС Π½Π° соврСмСнноС Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π² Ρ‚ΠΎΠΌ числС, ΠΈ Π½Π° язык Objective-C.

Π§ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ истории

Objective-C Π²ΠΎΠ·Π½ΠΈΠΊ Π² 80-x ΠΊΠ°ΠΊ модификация Π‘ Π² сторону Smalltalk. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ модификация эта состояла Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… синтаксичСских конструкций ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ прСпроцСссорС для Π½ΠΈΡ… (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, проходя ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π» ΠΈΡ… Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π‘), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (эти Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Objective-C воспринимался ΠΊΠ°ΠΊ надстройка Π½Π°Π΄ C. Π’ ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС это Ρ‚Π°ΠΊ ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€: ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° чистом Π‘, Π° послС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ конструкций ΠΈΠ· Objective-C (ΠΏΡ€ΠΈ нСобходимости), ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, свободно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π‘ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Objective-C. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, всС это касаСтся ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Π‘++. Π’ 1988 NeXT (Π° Π² послСдствии Apple) Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π»Π° Objective-C ΠΈ написала для Π½Π΅Π³ΠΎ компилятор ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (ΠΏΠΎ сути SDK). Π’ 1992 ΠΊ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ языка ΠΈ компилятора ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GNU Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° OpenStep. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ GCC ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Objective-C. ПослС ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ NeXT, Apple взяля ΠΈΡ… SDK (компилятор, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, IDE) Π·Π° основу для своих Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ. IDE для ΠΊΠΎΠ΄Π° Π½Π°Π·Π²Π°Π»ΠΈ Xcode, Π° для GUI – Interface Builder. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Cocoa для GUI Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) Π½Π° сСгодня являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΉ срСдой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Objective-C.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Objective-C

ОбмСн сообщСниями

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π΅ΠΌΡƒ сообщСниС, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΠΎΠ΅ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Π°ΠΊΠΎΠ΅ сообщСниС называСтся сСлСктор ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Бинтаксис посылки Ρ‚Π°ΠΊΠΎΠ²:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c

Π’ сообщСнии ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. Бколько Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠΉ – ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ двоСточия-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ количством Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ синтаксисом:

ΠŸΠΎΡΡ‹Π»ΠΊΠ° сообщСния, ΠΊΠ°ΠΊ ΠΈ любая функция C, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ (ΠΌΠΎΠΆΠ΅Ρ‚ void) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

ΠŸΡ€ΠΈ посылкС сообщСния nil ΠΎΠ½ΠΎ просто ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚. ΠŸΡ€ΠΈ посылкС сообщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу, Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π²ΡˆΠ΅ΠΌΡƒ Π·Π°ΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊ Π½Π΅Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° ΠΊΠΎΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ сообщСниС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаблон ΠΊΠΎΠ΄Π°:

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний

ΠŸΠΎΡΡ‹Π»ΠΊΠ° сообщСния транслируСтся Π² Π‘-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ:

Π’ΠΈΠΏ SEL, ΠΏΠΎ сути, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ char const *, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ int, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΎ врСмя выполнСния всС сСлСкторы ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌΠΈ значСниями согласно глобальной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сСлСкторов.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c

ΠŸΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ isa ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° receiver (ΠΏΡ€ΠΈ использовании Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Foundation, Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ для Cocoa, всС классы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ класс NSObject, поэтому Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ isa Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ), эта функция просматриваСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ список сСлСкторов класса с Ρ†Π΅Π»ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса Π½Π° сообщСниС method. Если Ρ‚Π°ΠΊΠΎΠΉ сСлСктор находится, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ класса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ пСрСдаСтся id ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΅Π³ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹) ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ послС сСлСктора ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ objc_msgSend(). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, отдаСтся ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ посылки сообщСния. Если Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½Ρ‹ΠΉ сСлСктор отсутствуСт, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ objc_msgSend() просматриваСт список сСлСкторов Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ objective c

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ схСмС Π²Ρ‹Π·ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² глобальной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сСлСкторов 12 соотвСтствуСт строкС β€œaddObject:”. Π”Π°Π»Π΅Π΅ функция objc_msgSend() выполняСт поиск ΠΏΠΎ списку сСлСкторов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° receiver ΠΈ, найдя Π΅Π³ΠΎ (ΠΏΡƒΡΡ‚ΡŒ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NSArray, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΌΠ΅Ρ‚ΠΎΠ΄ с сСлСктором 12), ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Π·ΠΎΠ² Ρ‚ΠΈΠΏΠ°:

ОбъявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° addObject ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° Π² объявлСнии класса выглядСл Ρ‚Π°ΠΊ:

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» всСго ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Но, исходя ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ – это ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ адрСсс Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ пСрСдаСтся Π²ΠΎ всякий ΠΌΠ΅Ρ‚ΠΎΠ΄ класса нСявно. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ ΠΎΠ± этом Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ минус («-«), стоящий ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (с минусом Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ) называСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΈΠ»ΠΈ экзСмпляра), Ρ‚.ΠΊ. ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ класса. Π’ Ρ‚Π΅Π»Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° экзСмпляр Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ послали сообщСниС) доступСн посрСдством Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ слова self (Π°Π½Π°Π»ΠΎΠ³ this Π² Π‘++), Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° экзСмпляр Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса – Ρ‡Π΅Ρ€Π΅Π· Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово super. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ пСрСдаСтся нСявный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ _cmd – сСлСктор этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ· глобальной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сСлСкторов. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста Π‘++ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Objective-C ΠΊΠ°ΠΊ-Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом virtual, ΠΈ всСгда ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ динамичСскому ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ.

Если Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°ΠΊ плюс (β€œ+”), Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ класса, ΠΈ, СстСствСнно, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ нСявный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ self (это Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ объявлСнию static-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Π‘++). А Π±Π΅Π· ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° isa ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ self, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ super Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ любого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ:

Если ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΊΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Ρ‚ΠΈΠΏ id) ΠΈΠ»ΠΈ класс (Ρ‚ΠΈΠΏ Class), ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ синтаксисом Π²Ρ‹Π·ΠΎΠ²Π°:

Π—Π΄Π΅ΡΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса UILabel ΠΈΠ· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° UIKit устанавливаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° text Ρ€Π°Π²Π½ΠΎΠ΅ строкС @”Hello world”. Π­Ρ‚Π° строка, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π° ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠ΅ΠΉ строк @”Hello” ΠΈ @” world”. ΠŸΠ΅Ρ€Π²Π°Ρ являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ посылкС сообщСния stringWithString классу NSString с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ-константой @”Hello”. Π’Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NSString, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ строкой-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. Π—Π°Ρ‚Π΅ΠΌ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ посылаСтся сообщСниС stringByAppendingString с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ @” world”. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ посылки этого сообщСния ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NSString, содСрТащий ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΠΈ строкового Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² сообщСниС setText: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° myLabel.

ОбъявлСниС класса

Объявим простой класс комплСксного числа Π² Ρ„Π°ΠΉΠ»Π΅ Complex.h:

Как Π²ΠΈΠ΄ΠΈΠΌ, всС объявлСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова interface ΠΈ end. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ (Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках). Π’Π½Π΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠœΠ΅Ρ‚ΠΎΠ΄ description отсутствуСт Π² объявлСнии класса Π½Π΅ случайно. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ dealloc ΠΈ init, присутствуСт Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса. ΠŸΡ€ΠΈ посылкС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса Complex сообщСния description Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ список сСлСкторов, ΠΊΡƒΠ΄Π°, послС компиляции, ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ сСлСкторы всСх ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… классом этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² интСрфСйсной части. Π’ΠΎ Π΅ΡΡ‚ΡŒ init, description ΠΈ dealloc Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’ связи с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚Ρ Π² динамичСской памяти, cΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° приходится ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π΄Π²Π° этапа: 1) Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти (сообщСниС alloc) ΠΈ 2) инициализация ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (конструкторы класса).

ПослС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ смСло ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ:

НСкоторыС классы ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ для быстрого (Π² ΠΎΠ΄ΠΈΠ½ этап) создания собствСнных экзСмпляров. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ своСго класса ΠΈ ΠΈΡ… имя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ начинаСтся с названия самого класса. НапримСр ΠΌΠ΅Ρ‚ΠΎΠ΄:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ строку, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ сторокой с Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Π½ΡƒΠ»Π΅ΠΌ, Π±Π΅Π· Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² alloc ΠΈ init:

ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

РСализация init ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π°. Π­Ρ‚ΠΎ конструктор класса. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΡŽΡ‚ id ΠΈ ΠΈΡ… названия всСгда начинаСтся со слова init, Π° конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ – это ΠΈ Π΅ΡΡ‚ΡŒ просто init. Π‘Ρ…Π΅ΠΌΠ° любого конструктора ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:

Π’ΠΎΡ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ спСциализированный (Π½Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) конструктор для класса с двумя Ρ‡Π»Π΅Π½Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса ΠΈ ΠΎΠ΄Π½ΠΈΠΌ цСлочислСнным ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ:

РСализация release ΠΈ retain для NSObject идСологичСски ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ, ΠΈ Π΅Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах, Π² силу отсутствия доступа ΠΊ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ счСтчика ссылок:

Π’ΠΎ Π΅ΡΡ‚ΡŒ самому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ посылаСтся сообщСниС dealloc, Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚, ΠΏΠΎ нСобходимости, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ счСтчики своих ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ сообщСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ сдСлал Ρ‚ΠΎ ΠΆΠ΅ самоС. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° dealloc для NSObject освободит ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ dealloc для ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ класса выглядит Ρ‚Π°ΠΊ:

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° с подсчСтом ссылок ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π° ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ адрСса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π° имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ со слова set:

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ _re относится ΠΊΠΎ встроСнному Ρ‚ΠΈΠΏΡƒ, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… слоТностСй с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ значСния Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚. Но Ссли ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса – Ρ‚ΠΎ простым присваиваниСм Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, вСдь Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ счСтчики ссылок. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ β„–3 Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ засоряСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ самовыгруТаСмый ΠΏΡƒΠ», Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (см. ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»).
ΠœΠ΅Ρ‚ΠΎΠ΄ доступа для чтСния значСния ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° всСгда ΠΎΡ‡Π΅Π½ΡŒ прост:

Π‘Π°ΠΌΠΎΠ²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ ΠΏΡƒΠ» Π² нитях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° созданный Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° соотвСтствуСт стандарту языка Π‘. Но Ссли Π² Π½Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ id, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спСцификатор Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° %@. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅ символы ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΌΠ΅ΡΡ‚ΡŒ id? Он просто подставит Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ описания description Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ объявлСн для класса NSObject. NSString ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Π΅Π³ΠΎ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ своСго строкового содСрТания. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π΅Π³ΠΎ, любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ своС строковоС содСрТаниС. НапримСр, Ρ‚Π°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс комплСксного числа с двумя ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° double:

ПослС выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sayHelloToName:withSurname: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ скорСй всСго Π½Π΅ догадываСтся, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сообщСниС release. Π”Π°ΠΆΠ΅ Ссли ΠΎΠ½ догадаСтся это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ возвращался ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π΅Π³ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌΠΈ послСдствиями. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ самоосвобоТдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠ³Π΄Π° Π»ΠΈΠ±ΠΎ Π² Π±ΡƒΠ΄ΡƒΡŽΡ‰Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π΄ΡƒΠΌΠ°Π» ΠΎΠ± ΠΈΡ… освобоТдСнии. Π Π΅ΡˆΠ°Π΅Ρ‚ΡΡ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса NSAutoreleasePool – самовыгруТаСмого ΠΏΡƒΠ»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ПослС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса всСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, созданным послС Π½Π΅Π³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сообщСния autorelease. ΠŸΡ€ΠΈ этом Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ помСщаСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ (послСдний созданный) самовыгруТаСмый ΠΏΡƒΠ». Когда Π½Π΅ΠΊΠΈΠΉ ΠΏΡƒΠ» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сообщСниС release, Ρ‚ΠΎ ΠΎΠ½ ΠΎΡ‚ΠΎΡˆΠ»Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ сообщСниС ΠΈ всСм своим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ ΠΈΡ… счСтчик ссылок (ΠΏΠΎ сути, уничтоТая). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π² самовыгруТаСмый ΠΏΡƒΠ», ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΆΠΈΡ‚ΡŒ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²ΠΎ всС врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΏΡƒΠ»Π°. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ памяти. ΠŸΠΎΡ‚ΠΎΠΌΡƒ рСкомСндуСтся Ρ†ΠΈΠΊΠ»Ρ‹, способныС ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ большоС количСство Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² самовыгруТаСмый ΠΏΡƒΠ», ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ (Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ) ΠΏΡƒΠ»Π°ΠΌΠΈ.

Π›ΡŽΠ±Π°Ρ Π½ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Cocoa, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NSAutoreleasePool Π² самом Π½Π°Ρ‡Π°Π»Π΅ (ΠΏΡ€Π΅ΠΆΠ΄Π΅ создания Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²), ΠΈ Π² самом ΠΊΠΎΠ½Ρ†Π΅ Π΅Π³ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ (послС уничтоТСния всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²). Ѐункция main(), ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡ‚ΡŒΡŽ любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Objective-C, ΠΏΡ€ΠΈ использовании Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Cocoa Π΄ΠΎΠ»ΠΆΠ½Π° всСгда Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

А ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ sayHelloToName:withSurname: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

К слову, ΠΌΠ΅Ρ‚ΠΎΠ΄ drain самовыгруТаСмого ΠΏΡƒΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ release с Ρ‚ΠΎΠΉ лишь Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ освобоТдСния сСбя самомго ΠΈ всСх содСрТащихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π΅Ρ‰Π΅ Π΄Π°Π΅Ρ‚ подсказку сборщику мусора Π²ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π² ΠΈΠ³Ρ€Ρƒ. Однако, это Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Mac OS 10.4 ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° iOS сборки мусора Π½Π΅Ρ‚.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Ρ„Π°ΠΉΠ» Complex.m с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Complex:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ спСциализированный конструктор с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄ complexWithRe:andIm: Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Complex, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ самовыгруТаСмом ΠΏΡƒΠ»Π΅. Π’ΠΎ ΠΆΠ΅ самоС Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ description, возвращая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NSString. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс Complex:

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

Если ΠΊ ΡƒΠΆΠ΅ написанному (Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ) классу Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ\ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π΅Π· наслСдования – ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±Π΅Π· особых усилий:

А ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ нСсут Π΄ΠΎΠ±Ρ€ΡƒΡŽ слуТбу ΠΊΠ°ΠΊ бСзымянныС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Objective-C – это Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ объявлСниС Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΠΎ ТСланию, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой класс (Π°Π½Π°Π»ΠΎΠ³ класса Π² Π‘++, Π³Π΄Π΅ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ со спСцификатором virtual … = 0). Π’ вСрсии языка 2.0 ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ (спСцификатор @required, ΠΎΠ½ считаСтся ΡƒΠΌΠ°Π»Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ) ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΌΠΈ (спСцификатор @optional). Если ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ класс Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Ρ‚ΠΎ ΠΎΠ½ называСтся классом, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΈ класс, Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ, ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

OΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса MyPrinter ΠΌΠΎΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ сообщСния print ΠΈ switchedOn, ΠΈ, послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° respondsToSelector:, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ сообщСниС loadPaper:, Ρ‚Π° ΠΊΠ°ΠΊ Π² Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ опрСдСлСния ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ОбъявлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» осущСствляСтся Ρ‚Π°ΠΊ:

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ΄ΠΈΠ½ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ нСскольким ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ. Для этого ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках Π² объявлСнии класса.

А Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСизвСстного класса (id), ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ, ΠΏΠΈΡˆΡƒΡ‚ Ρ‚Π°ΠΊ:

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π•ΡΡ‚ΡŒ Π΄Π²Π° основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок: глобальная статусная пСрСмСнная, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ выполнСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈ гСнСрация ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π‘ΡƒΡ‚ΡŒ ΠΎΠ±ΠΎΠΈΡ… Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка, надССтся, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π΅ смоТСт Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ Π΅Π³ΠΎ ΠΊΠΎΠ΄, поэтому Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅ΠΌΡƒ, сообщая ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΉ ситуации ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Objective-C ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π° эти ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ – это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса. Он (Π΄Π°ΠΆΠ΅ своим Ρ‚ΠΈΠΏΠΎΠΌ) нСсСт Π² сСбС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΉ ситуации. Для удобства Π² Cocoa имССтся класс NSException, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ двумя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ NSString ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ класса (Ρ‚ΠΈΠΏ id):

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ, Ρ‚Π΅ΠΌ самым, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ раскрутки стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° @throw. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ сгСнСрированноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, участок ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π΅Π³ΠΎ гСнСрация, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ с Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΠΌ try (Ρ‚Π°ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ). А Π·Π°Ρ‚Π΅ΠΌ, послС этого Π±Π»ΠΎΠΊΠ°, ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ с Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΠΌ catch(), Π³Π΄Π΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π‘Π»ΠΎΠΊΠΎΠ² catch() послС Π±Π»ΠΎΠΊΠ° try ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько. ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, раскручивая стСк, Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try ΠΈ, провСряя ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ всС Π±Π»ΠΎΠΊΠΈ catch(), ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚ΠΎΡ‚ Π±Π»ΠΎΠΊ catch(), Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ стоит Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ приводится нСявно (Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ совпадСниС, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΈΠ»ΠΈ id). Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Π½Π΅ совпало Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ catch(), ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ раскрутку стСка. Если послС Π±Π»ΠΎΠΊΠ° с Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΠΌ try стоит Π±Π»ΠΎΠΊ с Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΠΌ finally, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдастся Π΅ΠΌΡƒ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π»ΠΈ Π² Π±Π»ΠΎΠΊΠ΅ try ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π±Π»ΠΎΠΊ catch()), ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡŒ Π΅Π³ΠΎ послСдняя инструкция. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Cup Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ fill ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ происходит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

Π’ Π±Π»ΠΎΠΊΠ΅ finally ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ рСсурсы, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π±Π»ΠΎΠΊΠ΅ try, Π½ΠΎ Π½Π΅ освобоТдСнныС ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ сгСнСрированного ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Бвойства

Для вСрсии Objective-C 2.0 нашa рСализация класса Complex явно ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Π°: Π² Π½Π΅ΠΉ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа ΠΈ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ – сплошная Ρ€ΡƒΡ‚ΠΈΠ½Π°. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ Π΅Π³ΠΎ с использованиСм свойств:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *