Основная цель языка программирования Objective-C — добавить объектную модель в язык программирования C, а классы являются центральной особенностью Objective-C, поддерживающей объектно-ориентированное программирование, и часто называются определяемыми пользователем типами.
Класс используется для определения формы объекта и объединяет представление данных и методы для манипулирования этими данными в один аккуратный пакет. Данные и методы внутри класса называются членами класса.
@interface
и @implementation
.Когда вы определяете класс, вы определяете чертеж типа данных. Это не определяет никаких конкретных данных, но определяет, что означает имя класса, то есть из чего будет состоять объект класса и какие операции могут быть выполнены над таким объектом.
Определение класса начинается с ключевого слова @interface
, за которым следует имя интерфейса (класса) и тело класса, заключенное в фигурные скобки. В Objective-C все классы являются производными от базового класса NSObject
.
Он является суперклассом всех классов Objective-C. Он предоставляет основные методы, такие как выделение памяти и инициализация. Например, мы определили тип данных Box
, используя ключевое слово class
, следующим образом.
@interface Box:NSObject { //Instance variables double length; // Length of a box double breadth; // Breadth of a box } @property(nonatomic, readwrite) double height; // Property @end
Переменные экземпляра являются приватными и доступны только внутри реализации класса.
Класс предоставляет чертежи для объектов, поэтому в основном объект создается из класса. Мы объявляем объекты класса точно так же, как и переменные базовых типов. Следующие утверждения объявляют два объекта класса Box
—
Box box1 = [[Box alloc]init]; // Create box1 object of type Box Box box2 = [[Box alloc]init]; // Create box2 object of type Box
Оба объекта box1
и box2
будут иметь свои собственные копии членов данных.
Доступ к свойствам объектов класса можно получить с помощью оператора прямого доступа к членам (.)
. Для наглядности рассмотрим следующий пример:
#import <Foundation/Foundation.h> @interface Box:NSObject { double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box } @property(nonatomic, readwrite) double height; // Property -(double) volume; @end @implementation Box @synthesize height; -(id)init { self = [super init]; length = 1.0; breadth = 1.0; return self; } -(double) volume { return length*breadth*height; } @end int main() { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Box *box1 = [[Box alloc]init]; // Create box1 object of type Box Box *box2 = [[Box alloc]init]; // Create box2 object of type Box double volume = 0.0; // Store the volume of a box here // box 1 specification box1.height = 5.0; // box 2 specification box2.height = 10.0; // volume of box 1 volume = [box1 volume]; NSLog(@"Volume of Box1 : %f", volume); // volume of box 2 volume = [box2 volume]; NSLog(@"Volume of Box2 : %f", volume); [pool drain]; return 0; }
Когда приведенный выше код компилируется и выполняется, он выдает следующий результат —
2013-09-22 21:25:33.314 ClassAndObjects[387:303] Volume of Box1 : 5.000000 2013-09-22 21:25:33.316 ClassAndObjects[387:303] Volume of Box2 : 10.000000
Свойства введены в Objective-C для того, чтобы обеспечить доступ к переменной экземпляра класса за пределами класса.
Различные части объявления свойств выглядят следующим образом:
@property
, которое является ключевым словом.readwrite
или readonly
и strong
, unsafe_unretained
или weak
. Это зависит от типа переменной. Для любого типа указателей мы можем использовать strong
, unsafe_unretained
или weak
. Аналогично для других типов мы можем использовать readwrite
или readonly
.synthesize
в класс реализации. Но в последней версии XCode часть синтеза берет на себя XCode, и вам не нужно включать оператор synthesize
.Только с помощью свойств мы можем получить доступ к переменным экземпляра класса. Фактически, для свойств создаются внутренние методы getter
и setter
.
Например, предположим, у нас есть свойство @property
(nonatomic, readonly ) BOOL isDone
. Под капотом создаются сеттеры и геттеры, как показано ниже:
-(void)setIsDone(BOOL)isDone; -(BOOL)isDone;
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…