Основная цель языка программирования Objective-C состоит в том, чтобы добавить объектную ориентацию к языку программирования C, и классы являются центральной функцией Objective-C, которые поддерживают объектно-ориентированное программирование и часто называются пользовательскими типами.
Класс используется для указания формы объекта, и он объединяет представление данных и методы для манипулирования этими данными в одном аккуратном пакете. Данные и методы в классе называются членами класса.
Objective-C Характеристика
-
Класс определяется в двух разных разделах, а именно: @interface и @implementation .
-
Почти все в форме объектов.
-
Объекты получают сообщения, а объекты часто называют получателями.
-
Объекты содержат переменные экземпляра.
-
Объекты и переменные экземпляра имеют область видимости.
-
Классы скрывают реализацию объекта.
-
Свойства используются для предоставления доступа к переменным экземпляра класса в других классах.
Класс определяется в двух разных разделах, а именно: @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 , который является ключевым словом
-
За ним следуют спецификаторы доступа, которые являются неатомарными или атомарными, доступны для чтения или записи и только для чтения, сильные, unsafe_unretained или слабые. Это зависит от типа переменной. Для любого типа указателя мы можем использовать сильный, unsafe_unretained или слабый. Аналогично для других типов мы можем использовать readwrite или readonly.
-
Далее следует тип данных переменной.
-
Наконец, у нас есть имя свойства, оканчивающееся точкой с запятой.
-
Мы можем добавить синтезирующий оператор в классе реализации. Но в последнем XCode, часть синтеза позаботилась о XCode, и вам не нужно включать оператор синтеза.
Свойства начинаются с @property , который является ключевым словом
За ним следуют спецификаторы доступа, которые являются неатомарными или атомарными, доступны для чтения или записи и только для чтения, сильные, unsafe_unretained или слабые. Это зависит от типа переменной. Для любого типа указателя мы можем использовать сильный, unsafe_unretained или слабый. Аналогично для других типов мы можем использовать readwrite или readonly.
Далее следует тип данных переменной.
Наконец, у нас есть имя свойства, оканчивающееся точкой с запятой.
Мы можем добавить синтезирующий оператор в классе реализации. Но в последнем XCode, часть синтеза позаботилась о XCode, и вам не нужно включать оператор синтеза.
Это возможно только со свойствами, которые мы можем получить доступ к переменным экземпляра класса. На самом деле, для свойств создаются методы getter и setter.
Например, предположим, что у нас есть свойство @property (nonatomic, readonly) BOOL isDone . Под капотом находятся сеттеры и геттеры, созданные как показано ниже.