My:Objective-C — различия между версиями

Материал из synset
Перейти к: навигация, поиск
(Наследование классов)
Строка 85: Строка 85:
 
NSArray *sArray = [students componentsSeparatedByString:@", "];    // разбиение на слова
 
NSArray *sArray = [students componentsSeparatedByString:@", "];    // разбиение на слова
 
NSLog(@"%@", sArray);
 
NSLog(@"%@", sArray);
 +
</pre>
 +
 +
== iPhone: Hello world ==
 +
 +
см. [http://imaladec.com/story/hello_world].
 +
откройте файл HelloWorldViewController.m найдите метод viewDidLoad. Раскомментируйте его
 +
и напишите:
 +
<pre class="brush:cpp; gutter: false;">
 +
- (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];
 +
}
 
</pre>
 
</pre>

Версия 09:07, 23 сентября 2011

Objective-C — это расширенный набор C. Каждая программа, написанная на C, является корректной программой Objective-C. Все новые ключевые слова в Objective-C начинаются с символа @, который не является корректным идентификатором C. Кроме этого вызов методов объектов осуществляется при помощи сообщений [object message];

 
a.doSomething();   // С++
[a doSomething];   // Obj-C

Интерфейс объектов в Objective-C выглядит следующим образом:

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

Rect — имя нового класса. id — это указатель на объект Objective-C. Это эквивалентно void* в C, к которому вы можете привести любой тип указателя на объект, а также привести его к любому другому типу указателя на объект. Вы можете попробовать отправить какое-нибудь сообщение к id, но вы получите исключение в рантайме, если такая возможность не поддерживается.

Наследование классов

Class1.h:

 
#import <Foundation/Foundation.h>
@interface Class1 : NSObject {
    int var1;
}
-(void) setVariable;
@end

Class1.m:

 
#import "Class1.h"
@implementation Class1
-(void) setVariable{ var1 = 5; }
@end

Class2.h:

 
#import <Foundation/Foundation.h>
#import "Class1.h"
@interface Class2 : Class1 {    
}
-(void) printVariable;
@end

Class2.m:

 
 #import "Class2.h"
@implementation Class2
-(void) printVariable{ NSLog(@"var1 = %d", var1); }
@end

Используем классы:

 
Class2 *cl2 = [[Class2 alloc] init];    // создаем экземпляр класса 
[cl2 setVariable];                      
[cl2 printVariable];
[cl2 release];

Строки - это объекты

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];
}