четверг, 16 октября 2014 г.

Objective-C основные коцепции

Первоначально Objective-C появился как настройка над C, в виде новых синтаксических конструкций заимствованных у Smalltalk, которые переводились препроцессором в обычные функции C. Кроме того библиотека времени выполнения обрабатывала такие вызовы. Так язык C имея в своем синтаксисе только структуру struct, становился обьектно ориентированным языком.
По сути Objective-C является и сейчас настройкой над C, потому что мы можем написать программу на чистом C, и передать компилятору Objective-C.

"Мир" Objective-C воспринимает как наличие обьектов, которые общаются друг с другом путем передачи сообщений - вызовом методов. Состояние обьектов определяются инвариантами и закрыты от внешнего мира, а поведение методами, которые принимают сообщения и могут измененять в результате состояние обьекта.

Файлы модулей *.m (есть применяется сметь Objective-C и C++, то *.mm)
Файлы заголовков *.h

Все создаваемые обьекты размещаются в динамической памяти, от сюда есть специальный тип id, который является под капотом void*, то есть указателем на обьект любого типа.

Чтобы узнать какого же типа текущий обьект NSObject  - базовый класс для всех классов - приносит инвариант isa класса Class(позволяет узнавать имена своего и базового класса, а также инварианты класса и какие прототипы методов реализованые этим обьектом  в нем).
Зарезервированные слова Objective-C, отличающиеся от слов C, начинаются с @.


Вывод в стандартный вывод

NSLog(@"Hello, World!");

Префикс NS от OS NeXTSTEP - это вроде образовательная операционная система над которой трудился Стив Джобс, когда его попросили из собственного Apple Computers, именно там развили Objective-C

@ - этим знаком мы создаем обьект, на который будет ссылаться переменная.

Переменный и стандарный классы

Чтобы создать переменную типа строки мы должны использовать тип NSString*, это мы создаем ссылку на созданный обьект:
NSString* firstName = @"World";

Как всегда в С-мире есть плейсхолдеры, 
NSLog(@"Hello there, %@.", firstName);
%@ - это плейсхолдер для любой переменной, которая передается вместе со строкой.

Есть тип числовой:
NSNumber* age = @28;
NSLog(@"%@", age);

Массив, опять же нужно обратить внимание как мы создаем обьекты в памяти с помощью указания символом @, и потом ссылаемся на общую обвертку типом-ссылкой:
NSArray *apps = @[@"AngryFowl", @"Lettertouch", @"Tweetrobot"];
NSLog(@"%@", apps[1]);
Так создаются неизменяемые массивы, но в Objective-C есть всегда изменяемый брат близнец: например NSMutableArray, NSMutableString


Мапа:
NSDictionary *appRatings = @{@"AngryFowl": @3, @"Lettertouch": @5};
NSLog(@"%@", appRatings[@"AngryFowl"]);