可能重复:
如何在 Objective-C 中创建全局函数
我很好奇在 Objective C 中创建任何类都可以使用的全局实用程序方法通常是如何完成的。
我能想到的简单且唯一的解决方案是简单地创建一个类,即称其为 GlobalMethods,然后创建一堆类方法,这样就可以在没有实例化此类的情况下使用它们。
这是一个明智而有效的方法吗?关于方法的类型,它们可能是任何东西,例如我使用的自定义数学公式等。
可能重复:
如何在 Objective-C 中创建全局函数
我很好奇在 Objective C 中创建任何类都可以使用的全局实用程序方法通常是如何完成的。
我能想到的简单且唯一的解决方案是简单地创建一个类,即称其为 GlobalMethods,然后创建一堆类方法,这样就可以在没有实例化此类的情况下使用它们。
这是一个明智而有效的方法吗?关于方法的类型,它们可能是任何东西,例如我使用的自定义数学公式等。
我使用这种确切的方法来提供CocoaUtil
提供各种应用程序服务的全局类。
但是,您可以简单地定义执行 Objective-C 事情的全局 C 函数;例如:
实用程序.h:
extern NSString *helloWorld(int i);
实用程序:
NSString *helloWorld(int i)
{
return [NSString stringWithFormat:@"Hello World %d", i];
}
但是,我使用 Objective-C 类方法,因为它提供了更好的“命名空间”支持,比如 C++。
有几种常见的方法可以使某些代码在全球范围内可用。以下是一些来自 Apple 公共 API 的示例:
在新类上创建类方法。这是你建议的。例子:NSPropertyListSerialization
, NSJSONSerialization
.
在一些适当的现有类上创建类方法。示例:UIKit 使用类别将类方法添加到NSValue
,例如valueWithCGRect:
和valueWithCGPoint:
。
创建一个理解一组相关消息的单例。例子:[UIApplication sharedApplication]
, [NSFileManager defaultManager]
.
创建普通的旧 C 函数。示例:UIImagePNGRepresentation
、UIRectFill
、NSLog
、NSStringFromCGPoint
和 pantload 更多。
如果代码特别对某个对象进行操作,请使用类别在该对象的类中添加一个方法。示例:UIKit
添加sizeWithFont:
、drawAtPoint:withFont:
和相关方法以NSString
使用类别。