Objective-C Language
Methoden
Suche…
Syntax
-
oder+
: Die Art der Methode. Instanz oder Klasse?(): Wohin geht der Rückgabetyp? Verwenden Sie Void, wenn Sie nichts zurückgeben möchten!
Weiter ist der Name der Methode. Verwenden Sie camelCase und machen Sie den Namen leicht verständlich.
Wenn Ihre Methode Parameter benötigt, ist jetzt die Zeit! Der erste Parameter kommt direkt nach dem Namen der Funktion wie folgt
:(type)parameterName
. Alle anderen Parameter werden auf diese WeiseparameterLabel:(type)parameterName
Was macht deine Methode? Setzen Sie alles hier in die geschweiften Klammern {}!
Methodenparameter
Wenn Sie beim Aufruf Werte an eine Methode übergeben möchten, verwenden Sie Parameter:
- (int)addInt:(int)intOne toInt:(int)intTwo {
return intOne + intTwo;
}
Der Doppelpunkt ( :
) trennt den Parameter aus dem Methodennamen.
Der Parametertyp steht in Klammern (int)
.
Der Parametername folgt dem Parametertyp.
Erstellen Sie eine grundlegende Methode
So erstellen Sie eine grundlegende Methode, die "Hello World" auf der Konsole protokolliert:
- (void)hello {
NSLog(@"Hello World");
}
Das -
am Anfang kennzeichnet diese Methode als Instanzmethode.
Die (void)
bezeichnet den Rückgabetyp. Diese Methode gibt nichts zurück, also geben Sie void
.
Das Hallo ist der Name der Methode.
Alles in {}
ist der Code, der ausgeführt wird, wenn die Methode aufgerufen wird.
Rückgabewerte
Wenn Sie einen Wert aus einer Methode zurückgeben möchten, setzen Sie den Typ, den Sie zurückgeben möchten, in den ersten Satz von Klammern.
- (NSString)returnHello {
return @"Hello World";
}
Der Wert, den Sie zurückgeben möchten, folgt dem Schlüsselwort return
.
Klassenmethoden
Eine Klassenmethode wird für die Klasse aufgerufen, zu der die Methode gehört, keine Instanz davon. Dies ist möglich, weil Objective-C-Klassen auch Objekte sind. Um eine Methode als Klassenmethode zu bezeichnen, ändern Sie das -
in ein +
:
+ (void)hello {
NSLog(@"Hello World");
}
Methoden aufrufen
Aufruf einer Instanzmethode:
[classInstance hello];
@interface Sample
-(void)hello; // exposing the class Instance method
@end
@implementation Sample
-(void)hello{
NSLog(@"hello");
}
@end
Aufrufen einer Instanzmethode in der aktuellen Instanz:
[self hello];
@implementation Sample
-(void)otherMethod{
[self hello];
}
-(void)hello{
NSLog(@"hello");
}
@end
Aufruf einer Methode, die Argumente akzeptiert:
[classInstance addInt:1 toInt:2];
@implementation Sample
-(void)add:(NSInteger)add to:(NSInteger)to
NSLog(@"sum = %d",(add+to));
}
@end
Klassenmethode aufrufen:
[Class hello];
@interface Sample
+(void)hello; // exposing the class method
@end
@implementation Sample
+(void)hello{
NSLog(@"hello");
}
@end
Instanzmethoden
Eine Instanzmethode ist eine Methode, die für eine bestimmte Instanz einer Klasse verfügbar ist, nachdem die Instanz instanziiert wurde:
MyClass *instance = [MyClass new];
[instance someInstanceMethod];
So definieren Sie eine:
@interface MyClass : NSObject
- (void)someInstanceMethod; // "-" denotes an instance method
@end
@implementation MyClass
- (void)someInstanceMethod {
NSLog(@"Whose idea was it to have a method called \"someInstanceMethod\"?");
}
@end
Übergeben Sie den Wert, indem Sie den Parameter übergeben
Wenn der Parameterwert an eine Methode übergeben wird, wird der tatsächliche Parameterwert in den Formalparameterwert kopiert. Der tatsächliche Parameterwert ändert sich also nicht, wenn von der aufgerufenen Funktion zurückgekehrt wird.
@interface SwapClass : NSObject
-(void) swap:(NSInteger)num1 andNum2:(NSInteger)num2;
@end
@implementation SwapClass
-(void) num:(NSInteger)num1 andNum2:(NSInteger)num2{
int temp;
temp = num1;
num1 = num2;
num2 = temp;
}
@end
Aufrufen der Methoden:
NSInteger a = 10, b =20;
SwapClass *swap = [[SwapClass alloc]init];
NSLog(@"Before calling swap: a=%d,b=%d",a,b);
[swap num:a andNum2:b];
NSLog(@"After calling swap: a=%d,b=%d",a,b);
Ausgabe:
2016-07-30 23:55:41.870 Test[5214:81162] Before calling swap: a=10,b=20
2016-07-30 23:55:41.871 Test[5214:81162] After calling swap: a=10,b=20
Übergabe durch Referenzparameterübergabe
Wenn der Parameter an eine Methode übergeben wird, wird die Adresse des Aktualparameters an den Formalparameter übergeben. Der aktuelle Parameterwert wird also nach der Rückkehr von der aufgerufenen Funktion geändert.
@interface SwapClass : NSObject
-(void) swap:(int)num1 andNum2:(int)num2;
@end
@implementation SwapClass
-(void) num:(int*)num1 andNum2:(int*)num2{
int temp;
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
@end
Aufrufen der Methoden:
int a = 10, b =20;
SwapClass *swap = [[SwapClass alloc]init];
NSLog(@"Before calling swap: a=%d,b=%d",a,b);
[swap num:&a andNum2:&b];
NSLog(@"After calling swap: a=%d,b=%d",a,b);
Ausgabe:
2016-07-31 00:01:47.067 Test[5260:83491] Before calling swap: a=10,b=20
2016-07-31 00:01:47.070 Test[5260:83491] After calling swap: a=20,b=10