我知道类方法和对象方法之间的区别,但我不清楚为什么我们在 iOS 中使用类方法?谁能给我举个例子,这样我就可以理解了..??
5 回答
类方法是类句柄的方法,实例方法是单个实例上的方法。
类方法的一个常见用例是像NSString
's这样的便利分配器+stringWithFormat:
。它与使用相同(添加了自动释放,如果您不使用 ARC),[[NSString alloc] initWithFormat:]
但可以节省大量时间。
另一个例子是MFMailComposeViewController
'+canSendMail
方法。不需要先创建一个实例来看看是否支持发送邮件。该类对此更了解,因此该方法是类方法而不是实例方法。
我经常使用类方法来创建一个程序,该程序使用一种称为“单例”的设计模式。例如,如果我有一个处理来自其他类的请求的类,我只需要请求处理类的 1 个实例,并且我希望我的整个程序都使用同一个。在请求处理类中,我放置了一个静态变量来保存实例化。
static MyRequestHandler *requestHandler;
并且用一个类的方法来获取,如果还不存在的话,我先制作然后保存。
+ (MyRequestHandler *) getRequestHandler {
if (requestHandler == nil) {
requestHandler = [[MyRequestHandler alloc]init];
}
return requestHandler;
}
其他类可以在这样的代码中达到这个实例化
MyRequestHandler *requestHandler = [MyRequestHandler getRequestHandler];
类方法和对象方法。
@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 语言函数的范围。这是全局方法。但是……对象方法只给对象有效……类方法不能改变它的类属性,不能向对象发送消息。但是对象方法可以向对象发送消息并可以更改属性。
祝你好运。
类方法用于库例程。要访问这些方法,不必创建它的对象。
例如,有时它为您提供了简单的初始化程序来创建对象。
NSArray *arr = [NSArray array];