私はObjective-Cで使用されているさまざまな方法を使用しています。次の方法の違いを誰かがよく説明できますか?
void append(NSString *msg);
-(void) append:(NSString *)msg;
+(void)append:(NSString *)msg)
私はObjective-Cで使用されているさまざまな方法を使用しています。次の方法の違いを誰かがよく説明できますか?
void append(NSString *msg);
-(void) append:(NSString *)msg;
+(void)append:(NSString *)msg)
void append(NSString *msg)
C関数です。Objective-Cメソッドとは異なり、C関数はObjective-Cブラケット表記ではなく括弧を使用して呼び出されます。C関数は、iOSのグラフィックライブラリなどの低レベルのコンポーネントやフレームワークでよく見られます。
-(void) append:(NSString *)msg
インスタンスメソッドです。つまり、メソッドは、書き込まれたクラスのインスタンスで呼び出す必要があります。
+(void) append:(NSString *)msg
これは、クラスメソッドである、とは異なります。つまり、メソッドは、クラスの単一のインスタンスではなく、クラス自体で呼び出す必要があります。クラスメソッドは通常、インスタンス固有ではなく、本質的に一般的なユーティリティメソッド用に予約されています。
-(void) append:(NSString *)msg;
インスタンスメソッドです。
+(void) append:(NSString *)msg;
Classメソッドです。
void append(NSString *msg);
C
関数です。
void append(NSString *msg); // c function
-(void) append:(NSString *)msg; // instance method
+(void)append:(NSString *)msg;// class method
これはインスタンスメソッドを示します。このメソッドを呼び出すには、クラスの有効なインスタンスを保持する必要があります。
-(void)
これはクラスメソッドを示します。このメソッドを呼び出すためにクラスのインスタンスは必要ありません。
+(void)
void append(NSString *msg); // C Style function declaration.
-(void) append:(NSString *)msg;
これは、のようなクラスインスタンスから呼び出すことができるインスタンスメソッドです。
のようなNSStringクラスオブジェクトがあります。
NSString *strObj=@"hi";
strObjを大文字にするには、NSStringクラスメソッドを呼び出します-(NSString *)uppercaseString;
[strObj uppercaseString]
+(void)append:(NSString *)msg)
これは、クラスメソッドまたは静的メソッドです。例:NSString * strObj1 = [NSString string];
ここで、stringメソッドはクラスメソッドであり、次のように宣言されています。+(id)string; 自動解放された文字列が返されます。
-(void) append:(NSString *)msg; // IT is instans method it's always call with object of class.
+(void)append:(NSString *)msg;//it is class method always call with class name .
例:' alloc
'は、クラス名を使用したクラスメソッド呼び出しです。
[ClassName alloc];
void append(NSString *msg); it is a cFunction.
このようなテストクラスがあると想像してください
@interface Test : NSObject
// c function
void append(NSString *msg);
// instance method
- (void)append:(NSString *)msg;
// class method
+ (void)append:(NSString *)msg;
@end
次に、次のような関数を実装できます。
#import "Test.h"
@implementation Test
void append(NSString *msg)
{
// there is no self inside of a C-function!
NSLog(@"%@", msg);
}
- (void)append:(NSString *)msg;
{
// self in a instance method points to the instance
NSLog(@"%@, %@", msg, self);
}
+ (void)append:(NSString *)msg
{
// self in a class method points to the class
NSLog(@"%@, %@", msg, self);
}
@end
最後に、次の方法で関数を呼び出すことができます。
// C function: append(@"hello");
append(@"hello");
// instance method: - (void)append:(NSString *)msg;
[[[Test alloc] init] append:@"hello"];
// class method: + (void)append:(NSString *)msg;
[Test append:@"hello"];
クラスメソッドとインスタンスメソッドの違いは何ですか?も参照してください。