0

私はObjective-Cで使用されているさまざまな方法を使用しています。次の方法の違いを誰かがよく説明できますか?

void append(NSString *msg);
-(void) append:(NSString *)msg;
+(void)append:(NSString *)msg)
4

7 に答える 7

3

void append(NSString *msg)C関数です。Objective-Cメソッドとは異なり、C関数はObjective-Cブラケット表記ではなく括弧を使用して呼び出されます。C関数は、iOSのグラフィックライブラリなどの低レベルのコンポーネントやフレームワークでよく見られます。

-(void) append:(NSString *)msgインスタンスメソッドです。つまり、メソッドは、書き込まれたクラスのインスタンスで呼び出す必要があります。

+(void) append:(NSString *)msgこれは、クラスメソッドである、とは異なります。つまり、メソッドは、クラスの単一のインスタンスではなく、クラス自体で呼び出す必要があります。クラスメソッドは通常、インスタンス固有ではなく、本質的に一般的なユーティリティメソッド用に予約されています。

于 2012-08-21T06:26:04.727 に答える
2
-(void) append:(NSString *)msg; 

インスタンスメソッドです。

+(void) append:(NSString *)msg;

Classメソッドです。

void append(NSString *msg);

C関数です。

于 2012-08-21T06:09:40.350 に答える
2
void append(NSString *msg); // c function
-(void) append:(NSString *)msg; // instance method
+(void)append:(NSString *)msg;// class method
于 2012-08-21T06:09:55.403 に答える
0

これはインスタンスメソッドを示します。このメソッドを呼び出すには、クラスの有効なインスタンスを保持する必要があります。

-(void)

これはクラスメソッドを示します。このメソッドを呼び出すためにクラスのインスタンスは必要ありません。

+(void)
于 2012-08-21T06:12:51.977 に答える
0
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; 自動解放された文字列が返されます。

于 2012-08-21T06:15:14.173 に答える
0
-(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.
于 2012-08-21T06:17:15.353 に答える
0

このようなテストクラスがあると想像してください

@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"];

クラスメソッドとインスタンスメソッドの違いは何ですか?も参照してください。

于 2012-08-21T06:21:15.233 に答える