我一直在使用Objective-C中使用的不同方法。任何人都可以很好地解释下列方法之间的区别吗?
void append(NSString *msg);
-(void) append:(NSString *)msg;
+(void)append:(NSString *)msg)
答案 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?