Objective-C: объекты и классы — ясное введение в ООП
Основная цель языка программирования Objective-C — добавить объектную модель в язык программирования C, а классы являются центральной особенностью Objective-C, поддерживающей объектно-ориентированное программирование, и часто называются определяемыми пользователем типами.

Класс используется для определения формы объекта и объединяет представление данных и методы для манипулирования этими данными в один аккуратный пакет. Данные и методы внутри класса называются членами класса.
Характеристика Objective-C
- Класс определяется в двух различных разделах, а именно
@interfaceи@implementation. - Почти все находится в форме объектов.
- Объекты получают сообщения, и объекты часто называют приемниками.
- Объекты содержат переменные экземпляра.
- Объекты и переменные экземпляра имеют область видимости.
- Классы скрывают реализацию объекта.
- Свойства используются для предоставления доступа к переменным экземпляра класса в других классах.
- Определения классов Objective-C
Когда вы определяете класс, вы определяете чертеж типа данных. Это не определяет никаких конкретных данных, но определяет, что означает имя класса, то есть из чего будет состоять объект класса и какие операции могут быть выполнены над таким объектом.
Определение класса начинается с ключевого слова @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
Переменные экземпляра являются приватными и доступны только внутри реализации класса.
Выделение и инициализация объектов Objective-C
Класс предоставляет чертежи для объектов, поэтому в основном объект создается из класса. Мы объявляем объекты класса точно так же, как и переменные базовых типов. Следующие утверждения объявляют два объекта класса 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;




Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: