我习惯了函数式编程。现在为 iOS 写作,我发现自己经常使用类方法 (+),而不是创建实例 (从 -)。
通常我使用类方法来处理小的、重复的任务——比如发送异步请求、更新数据库、存储/检索首选项等。
这是正确的做法,还是我应该尝试更多地改变我的想法并开始使用实例?甚至可以避免一起使用类方法吗?
我习惯了函数式编程。现在为 iOS 写作,我发现自己经常使用类方法 (+),而不是创建实例 (从 -)。
通常我使用类方法来处理小的、重复的任务——比如发送异步请求、更新数据库、存储/检索首选项等。
这是正确的做法,还是我应该尝试更多地改变我的想法并开始使用实例?甚至可以避免一起使用类方法吗?
我最好的建议是看看 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 ...
}];
Objective C 支持第三种替代方案,用于封装不需要隐式访问实例变量的功能——它使用“普通”C 函数。与类函数不同,“普通”C 函数不使用虚拟调度,这在各种紧密循环中可能很重要。
请注意,类方法提供了比static
Java、C++ 和 C# 方法更多的功能:它们支持覆盖,让基类中的类方法在派生类中使用更具体的实现。
当您不需要类的任何实例时使用类方法,并且您的目的只能通过类似的方法调用来实现[[NSUserDefaults standardUserDefaults] synchronize];
在 MRC
该alloc/init
组合为您提供了拥有参考。这意味着您release
以后必须这样做。classMethod 返回一个非拥有引用。你可能不会释放它。
IE,
Person *firstPerson=[Person personWithName:@"AnoopVaidya" address:@"India"];
在 ARC 中,对于上述情况没有这样的区别。