为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
白衣非少年 2019-06-05 11:02:18
类和实例方法有什么区别?类方法和实例方法有什么区别?实例方法是否是访问器(getter和setter),而类方法几乎是所有其他东西?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

正如大多数其他答案所说的,实例方法使用类的实例,而类方法可以与类名一起使用。在目标-C中,它们的定义如下:

@interface MyClass : NSObject+ (void)aClassMethod;- (void)anInstanceMethod;@end

这样就可以这样使用:

[MyClass aClassMethod];MyClass *object = [[MyClass alloc] init];[object anInstanceMethod];

类方法的一些实际示例是许多基础类的方便方法,如NSString+stringWithFormat:NSArray+arrayWithArray:..实例方法将是NSArray-count方法。


查看完整回答
反对 回复 2019-06-05
?
临摹微笑

TA贡献1982条经验 获得超2个赞

与其他答案一样,实例方法对象进行操作并访问其实例变量,而类方法作为一个整体对类进行操作,并且无法访问特定实例的变量(除非将实例作为参数传入)。

类方法的一个很好的例子是反类型方法,它返回类的实例总数。类方法以+,而实例的开头是-..例如:

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;}@end

M:

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

它接受一个对象,将其放入数组中,并返回一个不需要管理内存的自动释放的数组版本,这对于临时数组和其他不需要管理的数组非常有用。

我希望您现在理解何时和/或为什么要使用类方法!


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 843 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信