My:Objective-C — различия между версиями
WikiSysop (обсуждение | вклад) (→Наследование классов) |
WikiSysop (обсуждение | вклад) (→Наследование классов) |
||
Строка 48: | Строка 48: | ||
#import <objc/Object.h> | #import <objc/Object.h> | ||
− | @interface Class1 : | + | @interface Class1 : Object { int var1; } |
− | + | -(void) setVar : (int)v; | |
− | } | ||
− | -(void) | ||
@end | @end | ||
@implementation Class1 | @implementation Class1 | ||
− | -(void) | + | -(void) setVar: (int)v { var1 = v; } |
@end | @end | ||
− | @interface Class2 : Class1 { | + | @interface Class2 : Class1 { } |
− | } | + | -(void) print; |
− | -(void) | ||
@end | @end | ||
@implementation Class2 | @implementation Class2 | ||
− | -(void) | + | -(void) print{ printf("var1 = %d", var1); } |
@end | @end | ||
int main() | int main() | ||
{ | { | ||
− | Class2 * | + | Class2 *c2 = [[Class2 alloc] init]; // создаем экземпляр класса |
− | [ | + | [c2 setVar : 5]; |
− | [ | + | [c2 print]; |
− | |||
return 0; | return 0; | ||
} | } | ||
+ | |||
</pre> | </pre> | ||
Версия 13:43, 23 сентября 2011
Objective-C — это расширенный набор C. Каждая программа, написанная на C, является корректной программой Objective-C. Все новые ключевые слова в Objective-C начинаются с символа @, который не является корректным идентификатором C. Кроме этого вызов методов объектов осуществляется при помощи сообщений [object message];
a.doSomething(); // С++ [a doSomething]; // Obj-C
Содержание
Пример
Ниже следующий пример можно откомпилировать 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 var1; } -(void) setVar : (int)v; @end @implementation Class1 -(void) setVar: (int)v { var1 = v; } @end @interface Class2 : Class1 { } -(void) print; @end @implementation Class2 -(void) print{ printf("var1 = %d", var1); } @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) конкретного приложения. Остальные файлы доступны только для чтения.