类和实例方法有什么区别?

类和实例方法有什么区别?

类方法和实例方法有什么区别?

实例方法是否是访问器(getter和setter),而类方法几乎是所有其他东西?


白衣非少年
浏览 879回答 3
3回答

芜湖不芜

正如大多数其他答案所说的,实例方法使用类的实例,而类方法可以与类名一起使用。在目标-C中,它们的定义如下:@interface MyClass : NSObject+ (void)aClassMethod;- (void)anInstanceMethod;@end这样就可以这样使用:[MyClass aClassMethod];MyClass *object = [[MyClass alloc] init];[object anInstanceMethod];类方法的一些实际示例是许多基础类的方便方法,如NSString氏+stringWithFormat:或NSArray氏+arrayWithArray:..实例方法将是NSArray氏-count方法。

临摹微笑

与其他答案一样,实例方法对象进行操作并访问其实例变量,而类方法作为一个整体对类进行操作,并且无法访问特定实例的变量(除非将实例作为参数传入)。类方法的一个很好的例子是反类型方法,它返回类的实例总数。类方法以+,而实例的开头是-..例如:static int numberOfPeople = 0;@interface MNPerson : NSObject {      int age;  //instance variable}+ (int)population; //class method. Returns how many people have been made.- (id)init;       //instance. Constructs object, increments numberOfPeople by one.- (int)age;        //instance. returns the person age@end@implementation MNPerson- (id)init{     if (self = [super init]){           numberOfPeople++;           age = 0;     }         return self;}+ (int)population{       return numberOfPeople;}- (int)age{      return age;}@endM:MNPerson *micmoo = [[MNPerson alloc] init];MNPerson *jon = [[MNPerson alloc] init];NSLog(@"Age: %d",[micmoo age]);NSLog(@"%Number Of people:  %d",[MNPerson population]);产出:年龄:0人:2另一个例子是,如果您有一个希望用户能够调用的方法,有时将它变成一个类方法是很好的。例如,如果您有一个名为MathFunctions的类,您可以这样做:+ (int)square:(int)num{        return num * num;}因此,用户将调用:[MathFunctions square:34];而不必实例化类!还可以使用类函数返回自动释放的对象,如NSArray的+ (NSArray *)arrayWithObject:(id)object它接受一个对象,将其放入数组中,并返回一个不需要管理内存的自动释放的数组版本,这对于临时数组和其他不需要管理的数组非常有用。我希望您现在理解何时和/或为什么要使用类方法!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS