My:Objective-C

Материал из synset
Версия от 13:48, 23 сентября 2011; WikiSysop (обсуждение | вклад) (Наследование классов)
Перейти к: навигация, поиск

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 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) конкретного приложения. Остальные файлы доступны только для чтения.