objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

Objective-C

Для обозначСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ id. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° id фактичСски являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для обозначСния Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ константа nil.

ВмСсто id ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с явным ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ класса. Π’ частности послСднСС позволяСт компилятору ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сообщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ β€” Ссли компилятор ΠΈΠ· Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ сообщСния, Ρ‚ΠΎ ΠΎΠ½ выдаст ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π’Π΅ΠΌ самым язык ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ Π² нСстрогой Ρ„ΠΎΡ€ΠΌΠ΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ нСсоотвСтствия Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ прСдупрСТдСния, Π° Π½Π΅ ошибки).

Для посылки сообщСний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

(НСмного ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π‘++ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ->ΠΌΠ΅Ρ‚ΠΎΠ΄).

ВсС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Objective-C Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа @

ΠšΠ»Π°ΡΡΡ‹

Для объявлСния класса создаСтся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .h ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ синтаксис:

РСализация класса создаСтся Π² Ρ„Π°ΠΉΠ»Π΅ с Ρ€Π°ΡΡˆΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ .m ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ синтаксис:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. h. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°-h. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° h. Для обозначСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ id. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° id фактичСски являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для обозначСния Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ константа nil.Π€Π°ΠΉΠ» first.h

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ объявлСниС класса с ΠΈΠΌΠ΅Π½Π΅ΠΌ first ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ класса NSObject (Π’ Apple runtime Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ всС классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ наслСдниками класса NSObject, Ссли ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с использованиСм Cocoa, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ свои классы Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ NSObject, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ мноТСство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… возмоТностСй).

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #import ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ объявлСнию Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Cocoa.h, содСрТащий объявлСния всСх классов ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² пространства Cocoa.framework.

objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. m. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°-m. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° m. Для обозначСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ id. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° id фактичСски являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для обозначСния Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ константа nil.Π€Π°ΠΉΠ» first.m

Начало Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса стандартно: с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #import «first.h», Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ объявлСниС класса.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° @implementation first Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ компилятору, Ρ‡Ρ‚ΠΎ Π΄Π°Π»Π΅Π΅ слСдуСт рСализация класса first

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ, просто опустив Π΅Π³ΠΎ объявлСниС ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΆΠ΅ содСрТащих ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

Π”Π°Π»Π΅Π΅ слСдуСт рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², практичСски Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰Π°ΡΡΡ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ C

Π’ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ a ΠΈ b ΠΈΠΌΠ΅ΡŽΡ‚ Π·ΠΎΠ½Ρƒ видимости Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго класса. ΠœΡ‹ написали ΠΌΠ΅Ρ‚ΠΎΠ΄ setA:(int) andB:(int) для установки ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Если ΠΆΠ΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ a ΠΈΠ»ΠΈ b, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ….

НапримСр: Выглядит вСсьма Π·Π°ΠΏΠ°Ρ€Π½ΠΎ.

Бвойства

Π‘ΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ @property, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° говорящая компилятору, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ носит Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ @synthesize ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса.

Бинтаксис объявлСния свойства:>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. h. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°-h. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° h. Для обозначСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ id. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° id фактичСски являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для обозначСния Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ константа nil.Π€Π°ΠΉΠ» myclass.h

Как Π²ΠΈΠ΄ΠΈΠΌ здСсь ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ класс myclass с двумя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ a ΠΈ b, доступными ΠΈΠ·Π²Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ объявлСния свойств.

objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. m. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°-m. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° m. Для обозначСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ id. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° id фактичСски являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для обозначСния Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ константа nil.Π€Π°ΠΉΠ» myclass.m

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ всС стало ΠΏΡ€ΠΎΡ‰Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… значСния.

НС Π½Π°Π΄ΠΎ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свойств сокращаСт лишь исходный ΠΊΠΎΠ΄ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Π° компилятор создаСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ класса, Ρ‚Π΅ΠΌ самым ΠΊΠ°ΠΊ Ρ€Π°Π· увСличивая Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ прилоТСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π½Π΅Ρ‚ нСобходимости видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ Π½Π΅ стоит ΠΊ Π½Π΅ΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈ свойство.

Атрибуты свойств

Π‘Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ всСгда Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ класса, Π² этом случаС Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² объявлСнии @property:

Бвойство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: @property (readonly) int a;

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° сСттСров свойств

Atomic

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

Как ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Objective-C Π² 2018 Π³ΠΎΠ΄Ρƒ. Π§Π°ΡΡ‚ΡŒ 1

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ iOS-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² частично ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пСрСходят Π½Π° Swift. Swift β€” Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΈ Π·Π° Π½ΠΈΠΌ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄ iOS. Но язык Π½Π΅Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ связан с инструмСнтариСм, Π° Π² инструмСнтарии Swift Π΅ΡΡ‚ΡŒ нСдостатки.

Π’ компиляторС Swift ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ находятся Π±Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ Π΅Π³ΠΎ падСнию ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π£ Swift Π½Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ABI. И, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° Swift ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ слишком Π΄ΠΎΠ»Π³ΠΎ.

Π’ связи с этим ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π³ΠΎΠ΄Π½Π΅Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½Π° Objective-C. А Objective-C ΡƒΠΆΠ΅ Π½Π΅ Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» Ρ€Π°Π½ΡŒΡˆΠ΅!

Π’ этом Ρ†ΠΈΠΊΠ»Π΅ статСй ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ возмоТности ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Objective-C, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ становится Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ приятнСС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΊΡ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ Π½Π° Objective-C, Π½Π°ΠΉΠ΄Π΅Ρ‚ для сСбя Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрСсноС.

objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. 40ahxlidhdgcqetc2vg m2dz8ja. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°-40ahxlidhdgcqetc2vg m2dz8ja. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° objective c ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 40ahxlidhdgcqetc2vg m2dz8ja. Для обозначСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ id. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° id фактичСски являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для обозначСния Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ константа nil.

let ΠΈ var

Для Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ макросы let ΠΈ var :

Если Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ const послС указатСля Π½Π° Objective-C класс Π±Ρ‹Π»ΠΎ Π½Π΅ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€ΠΎΡΠΊΠΎΡˆΡŒΡŽ, Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ нСявноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ const (Ρ‡Π΅Ρ€Π΅Π· let ) стало само собой Ρ€Π°Π·ΡƒΠΌΠ΅ΡŽΡ‰ΠΈΠΌΡΡ. ОсобСнно Π·Π°ΠΌΠ΅Ρ‚Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΏΡ€ΠΈ сохранСнии Π±Π»ΠΎΠΊΠ° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Для сСбя ΠΌΡ‹ Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ let ΠΈ var для объявлСния всСх ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π”Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° пСрСмСнная инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ nil :

ЕдинствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ β€” ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΊΠΎΠ΄Π°:

Волько Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ компилятора, Ссли Π·Π°Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· Π²Π΅Ρ‚ΠΎΠΊ.

Автовывод Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π±Π»ΠΎΠΊΠ°

НСмногиС Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ компилятор ΡƒΠΌΠ΅Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π±Π»ΠΎΠΊΠ°:

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. ОсобСнно Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ «Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ» ΠΊΠΎΠ΄ с использованиСм ReactiveObjC. Но Π΅ΡΡ‚ΡŒ ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

Generics ΠΈ for. in

Π’ Xcode 7 Π² Objective-C появились generics (Ρ‚ΠΎΡ‡Π½Π΅Π΅, lightweight generics). НадССмся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡ… ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. Но Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сСссию WWDC ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь ΠΈΠ»ΠΈ здСсь.

ΠœΡ‹ для сСбя Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ generic-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π΄Π°ΠΆΠ΅ Ссли это id ( NSArray * ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ legacy-ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ generic-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹.

Нам понадобится ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для получСния Ρ‚ΠΈΠΏΠ° Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ typeof :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш ΠΊΠΎΠ΄ выглядит Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅:

Generics ΠΈ copy / mutableCopy

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСобходимости явного привСдСния Ρ‚ΠΈΠΏΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, для NSArray объявлСния Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π°ΠΊΠΈΠΌΠΈ:

warn_unused_result

Для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° компилятор сгСнСрируСт ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:

overloadable

НСмногиС Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Clang позволяСт ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² языкС C (Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π² Objective-C). C ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° overloadable ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ с ΠΈΡ… Ρ€Π°Π·Π½Ρ‹ΠΌ количСством.

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

Boxed expressions

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ boxed expressions ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ число ΠΈΠ»ΠΈ Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Но Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ структуру, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… классов ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства (Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° +[NSValue valueWithCGPoint:] ΠΈ свойства CGPointValue ), Π½ΠΎ это всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠ°ΠΊ boxed expression!

Π§Ρ‚ΠΎΠ±Ρ‹ наша структура ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π° boxed expressions, Π½ΡƒΠΆΠ½ΠΎ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ objc_boxable для структуры.

И ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис @(. ) для нашСй структуры:

Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… структур ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ boxed expressions ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ:

Compound literals

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° полСзная конструкция языка β€” compound literal. Compound literals появились Π΅Ρ‰Π΅ Π² GCC Π² Π²ΠΈΠ΄Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка, Π° ΠΏΠΎΠ·ΠΆΠ΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² стандарт C11.

Π•Ρ‰Π΅ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² compound literals ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ константы, Π½ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ выраТСния:

Nullability

Π’ Xcode 6.3.2 Π² Objective-C появились nullability-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Apple Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΈΡ… для импортирования Objective-C API Π² Swift. Но Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² язык, Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это сСбС Π½Π° слуТбу. И ΠΌΡ‹ расскаТСм, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ nullability Π² Objective-C ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ ограничСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ знания, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сСссию WWDC.

ΠœΡ‹ стали Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ nullability для всСх ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования макроса JMNonnull :

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки

β†’ Код для ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹Π»ΠΎΠΆΠ΅Π½ Π² gist.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΡ‹ ΠΏΠΎΡΡ‚Π°Ρ€Π°Π»ΠΈΡΡŒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ± основных возмоТностях ΠΈ простых ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΡ… языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сущСствСнно ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ написаниС ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Objective-C ΠΊΠΎΠ΄Π°. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ свою ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enum’ΠΎΠ² ΠΊΠ°ΠΊ Π² Swift (ΠΎΠ½ΠΈ ΠΆΠ΅ Case-классы; ΠΎΠ½ΠΈ ΠΆΠ΅ АлгСбраичСскиС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ADT) ΠΈ возмоТности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°.

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

iOS Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Objective-C

iOS Xcode Objective-C iPhone iPad iPod

срСда, 18 июля 2012 Π³.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Objective-C.

Для Π½Π°Ρ‡Π°Π»Π° рассмотрим ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Objective-C.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ»Π° program.m

// Π­Ρ‚ΠΎ однострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

/*
Π­Ρ‚ΠΎ многострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.
*/

@interface Fraction: NSObject

— (void) setNumerator: (int) n;

— (void) setDenominator: (int) d;

NSLog (@»%i/%i», numerator, denominator);

— (void) setNumerator: (int) n

— (void) setDenominator: (int) d

int main (int argc, const char * argv[])

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Fraction *myFraction = [[Fraction alloc] init];

[myFraction setNumerator: 1];

[myFraction setDenominator: 3];

NSLog (@»Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ±ΠΈ: i%/i%», [myFraction numeratror], [myFraction denominator]);

[pool drain];
return 0;

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° логичСски Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° 3 части:

@interface
@implimentation
@program

КаТдая ΠΈΠ· этих сСкций являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π½Π° языкС Objectine-C. КаТдая сСкция ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ помСщаСтся для удобства Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (@interface помСщаСтся Π² Ρ„Π°ΠΉΠ» my_class.h, @implimentation помСщаСтся Π² Ρ„Π°ΠΉΠ» my_class.m, Π° @program помСщаСтся Π² Ρ„Π°ΠΉΠ» main.m), Π½ΠΎ для простоты понимания Ρ€Π°Π±ΠΎΡ‚Ρ‹ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΊΠ°ΠΊ сдСлано Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ записи ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² Objective-C.
Π’ Objective-C сущСствуСт 2 Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

// Π­Ρ‚ΠΎ однострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ для коммСнтирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

/*
Π­Ρ‚ΠΎ многострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. Он слуТит для ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ коммСнтирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ однострочного коммСнтария, Π΅Π³ΠΎ тСкст ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строчках.
ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°.
*/

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

#import «metric.h»
#import

Если Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ имя ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‚ΠΎ компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΏΠΊΠ°Ρ….
Если Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ имя ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ скобки, Ρ‚ΠΎ компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ систСмной ΠΏΠ°ΠΏΠΊΠ΅ header-Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ поиск Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.
*/

// ОписаниС классов для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

/*
Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ сСкция @interface ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ записи:

@interface Имя-Нового-Класса-ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: Имя-Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ-Класса-ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-ΠΎΡ‚-ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ-Π±ΡƒΠ΄ΡƒΡ‚-унаслСдованы-всС-ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ-Ρƒ-Π½Π΅Π³ΠΎ-свойства-характСристики-ΠΈ-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
<
Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок происходит объявлСниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²-характСристик;
>

ΠΏΠΎΠ΄ скобками ΠΈΠ΄Π΅Ρ‚ объявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²;

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ принято Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ названия классов с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ программистам Π±Ρ‹Π»ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ названия классов ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, хотя это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.
*/

/*
@interface Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… содСрТатся Π² классС Fraction ΠΈ ΠΈΠΌΠ΅Π½Π° этих Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ вновь созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ свои Π»ΠΈΡ‡Π½Ρ‹Π΅ экзСмпляры этих Π΄Π°Π½Π½Ρ‹Ρ….
*/

@interface Fraction: NSObject
<
int numerator;
int denominator;
>

/*
Для измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, описанных Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, задаСтся Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π—Π½Π°ΠΊ минус (-) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору Objective-C, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ-экзСмплярами Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляра класса выполняСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для своСго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляра класса. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляра Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ создания самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π—Π½Π°ΠΊ плюс (+) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π°Π΄ самим классом, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ new. ΠœΠ΅Ρ‚ΠΎΠ΄ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляря (-) всСгда ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСпосрСдствСнный доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ своСго экзСмпляра. Однако, это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса (+), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ самому классу, Π° Π½Π΅ ΠΊ экзСмплярам этого класса.

ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляров класса скрыты ΠΎΡ‚ доступа ΠΈΠ·Π²Π½Π΅ ΠΈ Π²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° нСдоступны.

Π£ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ для удобства понимания программистом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ рСкомСндуСтся это Π΄Π΅Π»Π°Ρ‚ΡŒ.
Если Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с Ρ‚ΠΈΠΏΠΎΠΌ (id)

Бинтаксис объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

— (void) setNumerator : (int) n;
Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° пСрСдаСтся Ρ‚ΠΈΠΏ имя
ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°

/*
ΠœΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· двоСточия ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.
*/

/*
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Objective-C.
*/

— (void) print;
— (void) setNumerator: (int) n;
— (void) setDenominator: (int) d;
— (int) numerator;
— (int) denominator;

/*
Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ сСкция @implimentation ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

@implimentation Имя-Нового-Класса
ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²;
@end;

— (void) print
<
NSLog (@»%i/%i», numerator, denominator);
>

/*
Для установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ созданныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-установщики. Π‘Π΅Π· Π½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, содСрТащихся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° экзСмпляра класса ΠΈΠ·Π²Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСльзя.
*/

— (void) setNumerator: (int) n
<
numerator = n;
>

— (void) setDenominator: (int) d
<
denominator = d;
>

/*
Для получСния Π΄Π°Π½Π½Ρ‹Ρ…, хранящихся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-экзСмплярС класса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ особыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…. ИмСна ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ доступ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚. Π­Ρ‚ΠΎ распространСнная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.
*/

— (int) numerator
<
return numerator;
>

— (int) denominator
<
return denominator;
>

/*
БСкция @program содСрТит ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄ΡƒΡ‚ нСпосрСдствСнно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², созданныС Π½Π° основС классов, описанных Π² сСкциях @interface ΠΈ @implimentation. Π­Ρ‚Π° сСкция содСрТит ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для нСпосрСдствСнного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ².
*/

/*
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ имя main. Π­Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово int, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ поставлСно ΠΏΠ΅Ρ€Π΅Π΄ main, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция main. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.
НаличиС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ main являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π² любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ каТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² Objective-C начинаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ с Π½Π΅Ρ‘.
*/

int main (int argc, const char * argv[])
<

/*
ΠœΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой размСщаСтся Ρ‚Π΅Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ main.
*/

/*
ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Objective-C Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ символом «Ρ‚ΠΎΡ‡ΠΊΠ° с запятой» (;).
*/

/*
NSAutoreleasePool Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ пространство Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° для Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ автоматичСски высвобоТдаСмого ΠΏΡƒΠ»Π° (autorelease pool).
*/

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// Π’Π΅ΡΡŒ ваш ΠΊΠΎΠ΄ начинаСтся с этого мСста.

NSLog (@»Π”Π°Π½Π½ΠΎΠ΅ сообщСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Оно Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² консоль ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.»);

/*
ОсобоС сочСтаниС \n ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ символ Π½ΠΎΠ²ΠΎΠΉ строки. Π­Ρ‚ΠΎΡ‚ символ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ систСмС, Ρ‡Ρ‚ΠΎ послС Π½Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. ВсС символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выводятся послС символа \n, появятся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС Π²Π²ΠΎΠ΄Π°.
*/

NSLog (@»Π­Ρ‚ΠΎ сообщСниС располоТится Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ сткрокС.\nΠ­Ρ‚ΠΎ сообщСниС окаТСтся Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС.\nА это Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ.»);

/*
Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NSLog ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° экран Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыС Ρ„Ρ€Π°Π·Ρ‹, Π½ΠΎ ΠΈ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСния.
*/

/*
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‚ слоТСния Π΄Π²ΡƒΡ… чисСл сохраняСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ sum.
*/

NSLog (@»Π‘ΡƒΠΌΠΌΠ° 10 ΠΈ 5 Ρ€Π°Π²Π½Π° %i», sum);

/*
ΠžΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ подряд, раздСляя ΠΈΡ… запятой, ΡƒΠΊΠ°Π·Π°Π² ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ лишь 1 Ρ€Π°Π·.
*/

int value1, value2, total;

value1 = 20;
value2 = 30;
total = value1 + value2;

/*
ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) NSLog Π² Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π½Π° экран строку ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ значСния сразу Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ЗначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² строку Π² согласно порядку ΠΈΡ… слСдования послС запятой.
*/

NSLog (@»Π‘ΡƒΠΌΠΌΠ° %i ΠΈ %i Ρ€Π°Π²Π½Π° %i», value1, value2, total);

/*
Π’Π°ΠΊ ΠΆΠ΅ NSLog позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ вычислСниС ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ самой.
*/

int result;
result = 1;
NSLog (@»Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ слоТСния 1 ΠΈ 2 Ρ€Π°Π²Π΅Π½ %i», result + 2);

/*
Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² столбик ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ.
*/

int a = 1;
int b = 5;
int с = 10;
NSLog (@»%2i», a);
NSLog (@»%2i», b);
NSLog (@»%2i», с);

/*
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ Π² столбик с Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ.
1
5
10
*/

/*
Если ΠΏΠ΅Ρ€Π΅Π΄ описатСлСм ΡˆΠΈΡ€ΠΈΠ½Ρ‹ поля поставлСн Π·Π½Π°ΠΊ минус, Ρ‚ΠΎ это ΠΏΠΎΠ»Π΅ выводится с Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ.
*/

/*
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ Π² столбик с Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ.
1
5
10
*/

myFraction = [Fraction alloc];

/*
ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° init, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Ρ‹Π» автоматичСски унаслСдован ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса NSObject.
*/

myFraction = [myFraction init];

/*
ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ выдСлСния памяти ΠΏΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ инициализация Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Objective-C Ρ‚Π°ΠΊ часто, Ρ‡Ρ‚ΠΎ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π²Ρ‹Π·ΠΎΠ².

Fraction *myFraction = [[Fraction alloc] init];

Π’ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сначала выполняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ….

ΠœΠ΅Ρ‚ΠΎΠ΄ new ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² сСбС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ alloc ΠΈ init.

Fraction *myFraction = [Fraction new];

Но ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСтся Π΄Π²ΡƒΡ…ΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ способ выдСлСния памяти ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
*/

/*
Установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρƒ Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
*/

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

/*
Π’Ρ‹Π²ΠΎΠ΄ Π½Π° экран Π΄Ρ€ΠΎΠ±ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° print.
*/

/*
Π”Ρ€ΠΎΠ±ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° экран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², хранящихся Π² созданном ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅.
*/

NSLog (@»Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ±ΠΈ: i%/i%», [myFraction numeratror], [myFraction denominator]);

/*
ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСх Ρ€Π°Π±ΠΎΡ‚ с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° release, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» автоматичСски унаслСдован ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса NSObject.
Π­Ρ‚ΠΎ критичСски ваТная Ρ‡Π°ΡΡ‚ΡŒ Π² ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ программирования Π½Π° языкС Objective-C. ΠŸΡ€ΠΈ создании ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π—Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ² Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π²Ρ‹ обязаны ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ эту ΠΏΠ°ΠΌΡΡ‚ΡŒ. Если Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сбою вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Однако ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ создали сами.
*/

// Π’Π΅ΡΡŒ ваш ΠΊΠΎΠ΄ заканчиваСтся здСсь.

/*
ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡƒΠ» памяти (autorelease pool) ΠΈ связанныС с Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.
*/

/*
Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return осущСствляСтся Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ main. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ состояния, Ρ€Π°Π²Π½ΠΎΠ΅ 0, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΠΊΠ½Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Debug Console Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ сообщСниС: «The Debugger has exited with status 0». Π›ΡŽΠ±ΠΎΠ΅ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ смогла Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».
*/

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² объявлСний (@interface) ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ (@implimentation)

Ѐайл объявлСний (@interface) Fraction.h

@interface Fraction: NSObject
<
int numerator;
ind denominator;
>
— (void) print;
— (void) setNumerator: (int) n;
— (void) setDenominator: (int) d;
— (int) numerator;
— (int) denominator;
— (double) convertToNum;
@end;

Π€Π°ΠΉΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ (@implimentation) Fraction.m

/*
Π’ Ρ„Π°ΠΉΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Fraction.m импортируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Fraction.h.
Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π° Π½Π΅ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки. ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², создаваСмых Π²Π°ΠΌΠΈ (вмСсто систСмных).
*/

— (void) print
<
NSLog (@»%i/%i», numerator, denominator);
>

— (void) setNumerator: (int) n
<
numerator = n;
>

— (void) setDenominator: (int) d
<
denominator = d;
>

— (int) numerator
<
return numerator;
>

— (int) denominator
<
return denominator;
>

Π€Π°ΠΉΠ» Ρ‚Π΅Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ FractionProgram.m

/*
Π’ Ρ„Π°ΠΉΠ» Ρ‚Π΅Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ импортируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Fraction.h.
Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π° Π½Π΅ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки. ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², создаваСмых Π²Π°ΠΌΠΈ (вмСсто систСмных).
*/

int main (int argc, char *argv[])
<
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction = [[Fraction alloc] init];

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
[myFraction print];

[pool drain];
return 0;
>

Π‘ΠΈΠ½Ρ‚Π΅Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² установщиков ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

/*
@synthesize автоматичСски создаСт стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-установщики ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΠΈ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² сСкции @interface, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ….
*/

@interface Fraction: NSObject
<
int numerator;
int denominator;
>

@property numerator, denominator;

@synthesize numerator;
@synthesize denominator;

Доступ ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ‚ΠΎΡ‡ΠΊΠ° (.)

myFraction.numerator; // эквивалСнтСн [myFarction numerator];
myFraction.numerator = 1; // эквивалСнтСн [myFarction setNumerator: 1];

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

@interface Fraction: NSObject
<
int numerator;
int denominator;
>

-(void) setTo: (int) n over: (int) d;

-(void) setTo: (int) n over: (int) d
<
numerator = n;
denominator = d;
>

int main (int argc, char *argv[])
<
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction = [[Fraction alloc] init];

[myFraction setTo: 1 over: 3];

[pool drain];
return 0;
>

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈ создании ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, хотя использованиС ΠΈΠΌΠ΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ удобство понимания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ программистом.
ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π±Π΅Π· ΠΈΠΌΠ΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² качСствС раздСлитСля Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ просто Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ (:).
-(int) set: (int) n: (int) m;
[myFraction set 1 : 3];

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

@interface Fraction: NSObject
<
int numerator;
int denominator;
>

-(void) setTo: (int) n over: (int) d;
-(void) add: (Fraction *) f;

-(void) setTo: (int) n over: (int) d
<
numerator = n;
denominator = d;
>

-(void) add: (Fraction *) f
<
numerator = numerator + f.denominator;
denominator = denominator + f.numerator;
>

int main (int argc, char *argv[])
<
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction1 = [[Fraction alloc] init];
Fraction *myFraction2 = [[Fraction alloc] init];

[myFraction1 setTo: 1 over: 3];
[myFraction2 setTo: 5 over: 7];

[myFraction1 add: myFraction2];

[myFraction1 release];
[myFraction2 release];

[pool drain];
return 0;
>

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ нСзависимыС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

@implimentation Fraction
-(void) reduce
<
int u = nemerator;
int v = denominator;
int temp;
NSLog (@»Π­Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: %i, %i. Они ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляра.», u, v);
>
@end;

АргумСнты, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

-(void) calculate: (double) x
<
x = x * 2;
>

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static.

Π§Ρ‚ΠΎΠ±Ρ‹ локальная пСрСмСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сохраняла своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ помСститС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static ΠΏΠ΅Ρ€Π΅Π΄ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ свои значСния Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

-(void) showPage
<
static int pageCount = 0;
pageCount++;
>

Доступ ΠΊ статичСским ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ доступными Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΡ… Π²Π½Π΅ объявлСния любого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π΄Π΅Π»Π°ΡŽΡ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° @implimentation). ПослС этого любой ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляра ΠΈΠ»ΠΈ класса смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ доступ ΠΊ этим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

static int pageCount;

@implimentation Printer
.
@end;

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово self

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово self для ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ являСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

-(void) add: (Fraction *) f
<
[self reduce];
>

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС запустится ΠΌΠ΅Ρ‚ΠΎΠ΄ самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π±Ρ‹Π»ΠΎ написано: [[myFraction add] reduce];

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² послС выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

-(Fraction *) add: (Fraction *) f
<
Fraction *result = [[Fraction alloc] init];

int resultNum, resultDenom;
resultNum = numerator * f.denominator + denominator * f.numerator;
resultDenom = denominator * f.denominator;

[result setTo: resultNum over: resultDenom];
[result reduce];

Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ с Π½ΠΈΠΌ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ занимаСмая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ result ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° add, Π½Π΅ освобоТдаСтся. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π΅ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° add, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ обязан Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся Π½ΠΎΠ²Ρ‹ΠΌ экзСмпляром ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² дальнСйшСм освобоТдСн ΠΈΠ· памяти послС Π΅Π³ΠΎ использования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Fraction *resultFraction;
resultFraction = [myfraction add: someFraction];
[resultFruction release];

Π’ΠΎ избСТания ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использованиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²ΠΈΠ΄Π° [[aFraction add: bFraction] print];

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

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊΠΎ всСм свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π½Π΅ΠΌ самом.

ClassB наслСдуСт всС свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ClassA. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-экзСмпляр класса Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ свои собствСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ.

НаслСдованиС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса. Π’ Π½ΠΎΠ²Ρ‹ΠΉ класс лишь Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС.

Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

Для Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ классС Π½ΡƒΠΆΠ½ΠΎ просто Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ классС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС, Π½ΠΎ ΡƒΠΆΠ΅ со своим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ. Новый ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅.

Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° dealloc ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово super.

ΠŸΡ€ΠΈ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° dealloc Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»Π° освобоТдСна ΠΏΠ°ΠΌΡΡ‚ΡŒ, занимаСмая Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вашими ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляра класса, Π½ΠΎ ΠΈ всСми унаслСдованными ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Для этого сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ слово super, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс.
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ [super release]; ΠΏΡ€ΠΈ использовании Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° release, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ унаслСдован Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС.
Π’Π°ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° dealloc Π²Π½ΡƒΡ‚Ρ€ΠΈ класса наслСдника производится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΡ€ΠΈ наслСдовании Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса. Π’Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСскими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (id).

Вопрос ΠΈΠ»ΠΈ дСйствиС
ΠœΠ΅Ρ‚ΠΎΠ΄

ЯвляСтся Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π»Π΅Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-класса ΠΈΠ»ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса?
-(BOOL) isKindOfClass: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-класс

ЯвляСтся Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π»Π΅Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-класса?-(BOOL) isMemberOfClass: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-класс
[myFract isMemberOfClass: [Fraction class]];

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ сСлСктором?
-(BOOL) respondsToSelector: сСлСктор

ΠœΠΎΠ³ΡƒΡ‚ Π»ΠΈ экзСмпляры Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° сСлСктор?
+(BOOL) instancesRespondToSelector: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-класс
[Fraction instancesRespondToSelector: @selector (setTo: over:)];

ЯвляСтся Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ подклассом ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ класса?
+(BOOL) isSubclassOfClass: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-класс

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ сСлСктором.
-(id) performSelector: сСлСктор

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ сСлСктором, c ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
-(id) performSelector: сСлСктор withObject: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ сСлСктором, c ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚1 ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚2.
-(id) performSelector: сСлСктор withObject: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚1 withObject: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚2

if ([obj1 class] == [obj2 class])

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для внСсСния Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ класс Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Π°ΠΌ нСдоступСн для измСнСния исходный Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

Для добавлСния Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΡƒΠ΄Π° помСститС Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

@interface Fraction (MathOps) //

Если ваш класс ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², Ρ‚ΠΎ просто пСрчислитС ΠΈΡ… Π² Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… скобках Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ.

@interface AddressBook: NSObject

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ нашСго ввСдСния Π² Objective-C. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Objective-C Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… нашСго Π±Π»ΠΎΠ³Π°.

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

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

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