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; 

is an instance method.

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

is a Class method.

void append(NSString *msg);

is a C function.

于 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 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 方法是类方法,它被声明为: + (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' 是一个类名的类方法调用。like

[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 回答
0

这表示一个实例方法。您必须持有该类的有效实例才能调用此方法。

-(void)

这表示一个类方法。您不需要类的实例来调用此方法。

+(void)
于 2012-08-21T06:12:51.977 回答