1

重複の可能性:
Objective-Cでグローバル関数を作成する方法

すべてのクラスが使用できるObjectiveCでグローバルユーティリティメソッドを作成することが一般的にどのように行われるのか興味があります。

私が考えることができる単純で唯一の解決策は、単にクラスを作成することです。つまり、GlobalMethodsと呼び、このクラスがインスタンス化されることなく使用できるように、一連のクラスメソッドを作成するだけです。

これは賢明で有効なアプローチですか?メソッドのタイプに関しては、たとえば、私が使用するカスタム数式など、何でもかまいません。

4

2 に答える 2

1

一部のコードをグローバルに使用できるようにする一般的な方法がいくつかあります。Apple のパブリック API の例をいくつか示します。

  • 新しいクラスでクラス メソッドを作成します。これはあなたが提案したものです。例: NSPropertyListSerialization, NSJSONSerialization.

  • 適切な既存のクラスでクラス メソッドを作成します。例: UIKit はカテゴリを使用して、 や などの にクラス メソッドを追加しNSValueます。valueWithCGRect:valueWithCGPoint:

  • 関連するメッセージのグループを理解するシングルトンを作成します。例: [UIApplication sharedApplication], [NSFileManager defaultManager].

  • 単純な古い C 関数を作成します。例: UIImagePNGRepresentationUIRectFillNSLogNSStringFromCGPoint、およびあえぎます。

  • コードが特定のオブジェクトで動作する場合は、カテゴリを使用してオブジェクトのクラスにメソッドを追加します。例: 、、および関連するメソッドをカテゴリの使用にUIKit追加します。sizeWithFont:drawAtPoint:withFont:NSString

于 2012-11-15T08:06:59.927 に答える
1

私はその正確なアプローチを使用して、CocoaUtilさまざまなアプリケーション サービスを提供するグローバル クラスを提供しています。

ただし、Objective-C の処理を​​行うグローバル C 関数を簡単に定義できます。例えば:

Util.h:

extern NSString *helloWorld(int i);

Util.m:

NSString *helloWorld(int i)
{
    return [NSString stringWithFormat:@"Hello World %d", i];
}

ただし、より優れた「名前空間」サポート、ala C++ を提供するため、Objective-C クラス アプローチを使用します。

于 2012-11-15T07:59:58.203 に答える