My:Objective-C
Версия от 13:56, 23 сентября 2011; WikiSysop (обсуждение | вклад)
Objective-C — это объектное расширение языка C. Каждая программа, написанная на C понимается и Objective-C (но естественно не наоборот). Новые ключевые слова в Objective-C начинаются с символа @. Кроме этого для вызов методов объектов используются сообщения заключенные в квадратные скобки: [object message];
[a doSomething]; // тоже, что a.doSomething(); в С++
Содержание
Пример
Ниже следующий пример можно откомпилировать online: http://ideone.com/
#import <objc/objc.h> #import <objc/Object.h> @interface MyObj : Object // Объявление интерфейсной части объекта MyObj { int num; } - (void) print; // void MyObj::print() - процедура - (int) getVal; // int MyObj::getVal() - функция - (void) setVal: (int) v; // void MyObj::getVal(int v) - функция с параметром - (int) calc:(int)x : (int)y; // int calc(int x, int y) @end @implementation MyObj // Описание методов объекта MyObj - (void) print { printf("num=%d\n", num); } - (int) getVal { return num; } - (void) setVal :(int) v { num = v; } - (int) calc :(int)x :(int)y { return x/y; } @end int main() { id obj = [[MyObj alloc] init]; [obj setVal: 5]; // obj.setVal(); printf("num =%d\n", [obj getVal]); // [...] возвращают значение ! printf("calc=%d\n", [obj calc: 6 : 3]); // obj.calc(6,3) [obj print]; // obj.print(); return 0; }
- Сначала идёт объявление объекта MyObj (между @interface ... @end). Затем блок реализации методов объекта (@implementation ... @end). Объявленный объект является наследником объекта Object (для iOS надо писать NSObject). Этот встроенный в язык объект имеет базовые функции управления памятью и т.п.
- Аналогично C++ можно управлять видимостью переменных при помощи вставки директив @private или @public
- id — это указатель на объект Objective-C. Это эквивалентно void* в C, к которому вы можете привести любой тип указателя на объект, а также привести его к любому другому типу указателя на объект.
Наследование классов
#import <objc/objc.h> #import <objc/Object.h> @interface Class1 : Object { int var; } // класс из одной переменной -(void) setVar : (int)v; // и метода её задания @end @implementation Class1 // имплементация класса Class1 -(void) setVar: (int)v { var = v; } @end @interface Class2 : Class1 { } // Наследник данных и методов класса Class1 -(void) print; // добавляет метод @end @implementation Class2 -(void) print{ printf("var1 = %d", var);} // описывает его @end int main() { Class2 *c2 = [[Class2 alloc] init]; // создаем экземпляр класса [c2 setVar : 5]; // доступен метод родителя [c2 print]; // и добавленный наследником метод return 0; }
Строки - это объекты
NSString *string1 = @"String one"; // новая строка NSString *string2 = [NSString stringWithString:string1]; // на её основе создаем еще одну NSString *string3 = [[NSString alloc] initWithString:string1]; // выделяем память [string3 release]; // освобождаем память NSString *formatString = [NSString stringWithFormat:@"Строка (%@) имеет длину %i" , string1, string1.length]; NSLog(@"%@",formatString); NSString *lower = [@"LOWER CASE ME" lowercaseString]; // в нижний регистр NSString *capitalize = [@"capitalize me" capitalizedString]; // в верхний регистр NSString *students = @"Tom, Bill, Joe"; NSArray *sArray = [students componentsSeparatedByString:@", "]; // разбиение на слова NSLog(@"%@", sArray);
iPhone: Hello world
см. [1]. откройте файл HelloWorldViewController.m найдите метод viewDidLoad. Раскомментируйте его и напишите:
- (void)viewDidLoad { [super viewDidLoad]; UILabel *helloWorld = [[UILabel alloc] initWithFrame:CGRectMake(100.0f, 100.0f, 100.0f, 20.0f)]; helloWorld.backgroundColor = [UIColor clearColor]; helloWorld.text = @"Hello world"; [self.view addSubview:helloWorld]; [helloWorld release]; }
Файловая система iOS
Приложение имеет доступ только к своей "песочнице". При этом, записывать или изменять файлы можно осуществить только в папке документов (Documents) конкретного приложения. Остальные файлы доступны только для чтения.