在iOS中使用类方法

时间:2012-07-31 12:42:56

标签: iphone ios ipad class-method

我知道类方法和对象方法之间的区别但是我不清楚为什么我们在iOS中使用类方法?任何人都可以给我一些例子,所以我能理解......

5 个答案:

答案 0 :(得分:1)

类方法是类处理的方法,而实例方法是各个实例上的方法。

类方法的一个常见用例是像NSString的{​​{1}}这样的便利分配器。它是相同的(如果您不使用ARC,则添加自动释放)使用+stringWithFormat:,但为您节省了大量时间。

另一个例子是[[NSString alloc] initWithFormat:]的{​​{1}}方法。首先创建实例只是为了查看是否支持发送邮件。该类知道更好,因此这个方法是一个类方法而不是实例方法。

Similar question

答案 1 :(得分:1)

Stackoverflow是你的朋友。

What is the difference between class and instance methods?

类方法通常是方便的方法,例如NSString的+ stringWithFormat: 也就是说,您不需要实例化类来使用它们。

答案 2 :(得分:1)

类方法和对象方法。

@interface TheClassA : NSObject
+ (TypeA)classMethod;
- (TypeB)objectMethod;
@end

@implementation TheClassA

+ (TypeA)classMethod
{
}

- (TypeB)objectMethod
{
}

@end



main()
{
   [TheClassA classMethod]; // Correct!!!
   [TheClassA objectMethod]; // Wrong!!!

   TheClassA *obj = [[TheClassA alloc] init];
   [obj classMethod]; // Wrong;
   [obj objectMethod]; // Correct;
   [obj.class classMethod]; // Correct
   [obj.class objectMethod]; // Wrong
}

类方法的范围与通用C语言函数类似。这是全球性的方法。 但是...对象方法只给对象有效... 类方法不能改变它的类属性,不能向对象发送消息。 但是object方法可以向对象发送消息并可以更改属性。

祝你好运。

答案 3 :(得分:1)

我经常使用类方法来创建一个使用名为“singleton”的设计模式的程序。如果我有一个处理来自其他类的请求的类,我只需要1个请求处理类的实例化,我希望我的整个程序使用相同的一个。在请求处理类中,我放了一个静态变量来保存实例化。

static MyRequestHandler *requestHandler;

并使用类方法来获取它,如果它还不存在,我首先创建然后保存它。

+ (MyRequestHandler *) getRequestHandler {
     if (requestHandler == nil) {
         requestHandler = [[MyRequestHandler alloc]init];
     }
     return requestHandler;
}

其他类可以在像这样的代码中实现此实例化

MyRequestHandler *requestHandler = [MyRequestHandler getRequestHandler];

答案 4 :(得分:0)

类方法用于库例程。要访问这些方法,不必创建其对象。

例如,有时它会为您提供简单的初始化程序来创建对象。

NSArray *arr = [NSArray array];