Objective-C使用类方法的最佳实践

时间:2013-03-03 17:05:25

标签: objective-c instance class-method

我习惯于函数式编程。现在为iOS编写,我发现自己经常使用类方法(+),而不是创建实例(来自 - )。

通常我会将类方法用于小的重复性任务 - 例如发送异步请求,更新数据库,存储/检索首选项等。

这是正确的做法,还是应该尝试更改我的想法并开始使用实例?甚至可以避免一起使用类方法吗?

3 个答案:

答案 0 :(得分:4)

我最好的建议是看看Foundation和Cocoa是如何做的并且做同样的事情。 Objective-C中有一个类方法的地方。

类方法的一些例子包括

[UIView animateWithDuration:0.3 animations:^{
    // Animation here...
}];

[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *date, NSError *error) {
                           // Handle response here ...
                       }];

答案 1 :(得分:2)

Objective C支持第三种替代方法,用于封装不需要隐式访问实例变量的功能 - 它使用“普通”C函数。与类函数不同,“普通”C函数不使用虚拟调度,这在不同的紧密循环中可能很重要。

请注意,类方法提供的功能比Java,C ++和C#的static方法更多:它们支持覆盖,让基类中的类方法在派生类中使用更具体的实现。

答案 2 :(得分:0)

当您不需要该类的任何实例时,将使用类方法,并且您的目的仅通过[[NSUserDefaults standardUserDefaults] synchronize];

之类的方法调用来提供

在MRC中

alloc/init组合为您提供了拥有参考。这意味着您以后必须release。 classMethod返回非拥有引用。你可能不会发布它。

即,

Person *firstPerson=[Person personWithName:@"AnoopVaidya" address:@"India"];

在ARC中,对于上述情况,没有这样的差异。