在iphone中void和+(void)之间有什么区别

时间:2012-08-21 06:06:35

标签: iphone objective-c ios5

我一直在使用Objective-C中使用的不同方法。任何人都可以很好地解释下列方法之间的区别吗?

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

7 个答案:

答案 0 :(得分:3)

void append(NSString *msg)是一个C函数。与Objective-C方法不同,使用括号而不是Objective-C括号表示法调用C函数。 C函数经常出现在iOS中的低级组件和框架中,例如图形库。

-(void) append:(NSString *)msg是一种实例方法。这意味着必须在已写入的任何类的实例上调用该方法。

这与+(void) append:(NSString *)msg不同,后者是一种类方法。这意味着必须在类本身上调用该方法,而不是在类的任何单个实例上调用。类方法通常保留用于一般性的实用方法,而不是特定于实例的。

答案 1 :(得分:2)

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

是一种实例方法。

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

是一种Class方法。

void append(NSString *msg);

C函数。

答案 2 :(得分:2)

void append(NSString *msg); // c function
-(void) append:(NSString *)msg; // instance method
+(void)append:(NSString *)msg;// class method

答案 3 :(得分:0)

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

-(void)

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

+(void)

答案 4 :(得分: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; 这将返回自动释放的字符串。

答案 5 :(得分: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.

答案 6 :(得分: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"];

另见What is the difference between class and instance methods?