Интернет магазин китайских планшетных компьютеров



Компьютеры - Objective-C - Создание новых классов

06 июля 2011


Оглавление:
1. Objective-C
2. Синтаксис языка
3. Создание новых классов
4. Как работает механизм сообщений
5. Протоколы
6. Обработка исключений
7. Создание и уничтожение объектов
8. Управление памятью
9. Категории
10. Class objects и Objective-C runtime
11. Разное



Все новые директивы компилятору в языке Objective-C начинаются с символа @.

Как и в С++ описание класса и его реализация разделены.

Ниже приводится общая структура описания нового класса:

@interface ClassName : SuperClass
{
    instance variable declarations
}
 
method declarations
@end

В версии runtime от Apple все классы имеют общего предка — класс NSObject, содержащий целый ряд важных методов.

Описание переменных ничем не отличается от описания переменных в структурах в языке С:

Если у вас не Apple, то скорее всего вместо NSObject вам потребуется Object.

@interface Rect : NSObject
{
        float     width;
        float     height;
        BOOL      isFilled;
        NSColor * color;
}
@end

Описания же методов заметно отличаются от принятых в С++ и очень сильно похожи на описания методов в языке Smalltalk.

Каждое описание начинается со знака плюс или минус. Знак плюс обозначает, что данный метод является методом класса. Фактически методы класса являются аналогами статических методов в классах в языке С++.

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

Ниже приводятся описания возможных методов для класса Rect.

@interface Rect : NSObject
{
        float     x, y;
        float     width;
        float     height;
        BOOL      isFilled;
        NSColor * color;
}
+ newRect;
-  display;
-  width;
-  height;
-  area;
-  setWidth:  theWidth;
-  setHeight:  theHeight;
-  setX:  theX y:  theY;
@end

Обратите внимание, что имя метода может совпадать с именем instance-переменной данного класса.

Тип возвращаемого методом значения указывается в круглых скобках сразу же после знака плюс или минус. Если тип не указан, то считается, что возвращается значение типа id.

Далее идет имя метода, где после каждого двоеточия задается тип аргумента и сам аргумент.

Язык Objective-C позволяет для аргументов метода задавать также один из следующих описателей — oneway, in, out, inout, bycopy и byref. Данные описатели служат для задания направления передачи данных и способа передачи. Их наличие заметно упрощает реализацию и работу с распределенными объектами.

Метод, принимающий произвольное количество параметров, может быть описан следующим образом:

- makeGroup:  object, ...;

Для подключения заголовочного файла в Objective-C вместо директивы #include используется директива #import, аналогичная #include, но гарантирующая, что данный файл будет подключен всего один раз.

В ряде случаев возникает необходимость в объявлении того, что данное имя является именем класса, но без явного его описания.

В этом случае можно воспользоваться директивой @class, объявляющей, что следующие за ней имена являются именами классов.

@class Shape, Rect, Oval;

Реализация методов класса выглядит следующим образом:

#import "ClassName.h"
 
@implementation ClassName
 
    method implementations
 
@end

Ниже приводится пример реализации методов класса Rect, описанного выше.

#import "Rect.h"
 
@implementation Rect
 
+ newRect
{
        Rect * rect =  init];
 
        ;
        ;
        ;
 
        return rect;
}
 
-  width
{
   return width;
}
 
-  height
{
   return height;
}
 
-  area
{
   return  * ;
}
 
-  setWidth:  theWidth
{
   width = theWidth;
}
 
-  setHeight:  theHeight
{
   height = theHeight;
}
 
-  setX:  theX y:  theY
{
   x = theX;
   y = theY;
}
 
@end

Как видно из примера выше, в методах доступны все instance-переменные. Однако, как и в С++, есть возможность управлять видимостью переменных при помощи директив @private, @protected и @public.

@interface Worker : NSObject
{
        char * name;
@private
        int    age;
        char * evaluation;
@protected
        int    job;
        float  wage;
@public
        id     boss
}

При этом к public переменным класса можно обращаться непосредственно, используя оператор ->.



Просмотров: 11395


<<< Mission Control
Photo Booth >>>