Objective-C-Klassen und -Objekte

Der Hauptzweck der Programmiersprache Objective-C besteht darin, der Programmiersprache C eine Objektorientierung hinzuzufügen. Klassen sind das zentrale Merkmal von Objective-C, das die objektorientierte Programmierung unterstützt und häufig als benutzerdefinierte Typen bezeichnet wird.

Eine Klasse wird verwendet, um die Form eines Objekts anzugeben. Sie kombiniert Datendarstellung und Methoden zum Bearbeiten dieser Daten in einem übersichtlichen Paket. Die Daten und Methoden innerhalb einer Klasse werden als Mitglieder der Klasse bezeichnet.

Ziel-C-Charakteristik

  • Die Klasse ist nämlich in zwei verschiedenen Abschnitten definiert @interface und @implementation.

  • Fast alles ist in Form von Objekten.

  • Objekte empfangen Nachrichten und Objekte werden häufig als Empfänger bezeichnet.

  • Objekte enthalten Instanzvariablen.

  • Objekte und Instanzvariablen haben Gültigkeitsbereich.

  • Klassen verbergen die Implementierung eines Objekts.

  • Eigenschaften werden verwendet, um den Zugriff auf Klasseninstanzvariablen in anderen Klassen zu ermöglichen.

Ziel-C-Klassendefinitionen

Wenn Sie eine Klasse definieren, definieren Sie einen Entwurf für einen Datentyp. Dies definiert eigentlich keine Daten, aber es definiert, was der Klassenname bedeutet, dh woraus ein Objekt der Klasse bestehen wird und welche Operationen an einem solchen Objekt ausgeführt werden können.

Eine Klassendefinition beginnt mit dem Schlüsselwort @interfacegefolgt vom Namen der Schnittstelle (Klasse); und der Klassenkörper, der von zwei geschweiften Klammern umschlossen ist. In Objective-C werden alle Klassen von der aufgerufenen Basisklasse abgeleitetNSObject. Es ist die Oberklasse aller Objective-C-Klassen. Es bietet grundlegende Methoden wie Speicherzuweisung und Initialisierung. Zum Beispiel haben wir den Box-Datentyp mit dem Schlüsselwort definiertclass wie folgt -

@interface Box:NSObject {
   //Instance variables
   double length;    // Length of a box
   double breadth;   // Breadth of a box
}
@property(nonatomic, readwrite) double height;  // Property

@end

Die Instanzvariablen sind privat und nur innerhalb der Klassenimplementierung zugänglich.

Zuweisen und Initialisieren von Objective-C-Objekten

Eine Klasse stellt die Blaupausen für Objekte bereit, sodass im Grunde genommen ein Objekt aus einer Klasse erstellt wird. Wir deklarieren Objekte einer Klasse mit genau der gleichen Art von Deklaration, die wir Variablen von Basistypen deklarieren. Die folgenden Anweisungen deklarieren zwei Objekte der Klasse Box -

Box box1 = [[Box alloc]init];     // Create box1 object of type Box
Box box2 = [[Box alloc]init];     // Create box2 object of type Box

Beide Objekte box1 und box2 haben eine eigene Kopie der Datenelemente.

Zugriff auf die Datenelemente

Auf die Eigenschaften von Objekten einer Klasse kann mit dem direkten Elementzugriffsoperator (.) Zugerechnet werden. Versuchen wir das folgende Beispiel, um die Dinge klar zu machen:

#import <Foundation/Foundation.h>

@interface Box:NSObject {
   double length;    // Length of a box
   double breadth;   // Breadth of a box
   double height;    // Height of a box
}

@property(nonatomic, readwrite) double height;  // Property
-(double) volume;
@end

@implementation Box

@synthesize height; 

-(id)init {
   self = [super init];
   length = 1.0;
   breadth = 1.0;
   return self;
}

-(double) volume {
   return length*breadth*height;
}

@end

int main() {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];    
   Box *box1 = [[Box alloc]init];    // Create box1 object of type Box
   Box *box2 = [[Box alloc]init];    // Create box2 object of type Box

   double volume = 0.0;             // Store the volume of a box here
 
   // box 1 specification
   box1.height = 5.0; 

   // box 2 specification
   box2.height = 10.0;
  
   // volume of box 1
   volume = [box1 volume];
   NSLog(@"Volume of Box1 : %f", volume);
   
   // volume of box 2
   volume = [box2 volume];
   NSLog(@"Volume of Box2 : %f", volume);
   
   [pool drain];
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

2013-09-22 21:25:33.314 ClassAndObjects[387:303] Volume of Box1 : 5.000000
2013-09-22 21:25:33.316 ClassAndObjects[387:303] Volume of Box2 : 10.000000

Eigenschaften

In Objective-C werden Eigenschaften eingeführt, um sicherzustellen, dass auf die Instanzvariable der Klasse außerhalb der Klasse zugegriffen werden kann.

Die verschiedenen Teile der Eigenschaftserklärung sind wie folgt.
  • Eigenschaften beginnen mit @property, das ist ein Schlüsselwort

  • Es folgen Zugriffsspezifizierer, die nichtatomar oder atomar, schreibgeschützt oder schreibgeschützt und stark, unsicher, nicht zurückgehalten oder schwach sind. Dies hängt vom Typ der Variablen ab. Für jeden Zeigertyp können wir strong, unsafe_unretained oder schwach verwenden. In ähnlicher Weise können wir für andere Typen readwrite oder readonly verwenden.

  • Darauf folgt der Datentyp der Variablen.

  • Schließlich haben wir den Eigenschaftsnamen durch ein Semikolon abgeschlossen.

  • Wir können der Implementierungsklasse eine synthetize-Anweisung hinzufügen. Im neuesten XCode wird der Syntheseteil jedoch vom XCode übernommen, und Sie müssen keine Synthesize-Anweisung einschließen.

Es ist nur mit den Eigenschaften möglich, auf die Instanzvariablen der Klasse zuzugreifen. Tatsächlich werden für die Eigenschaften intern Getter- und Setter-Methoden erstellt.

Nehmen wir zum Beispiel an, wir haben eine Eigenschaft @property (nonatomic ,readonly ) BOOL isDone. Unter der Haube befinden sich Setter und Getter, die wie unten gezeigt erstellt wurden.

-(void)setIsDone(BOOL)isDone;
-(BOOL)isDone;