19

iOS アプリを作成するとき、他のファイルから使用する予定の関数をどこに配置しますか?

たとえば、NSDate を相対時間文字列 ("5 秒前") に変換する関数。クラスを作成して、これらの関数をすべて静的にしますか?

4

4 に答える 4

18

便利な場所に機能を配置できます。関数または関数のグループが多くの場所にインポートされる可能性が高い場合は、それらを独自の .h/.m ペアで宣言および実装できます。たとえば、日付変換関数を XYZDateUtilities.m という名前のファイルに実装し、それをXYZDateUtilities.hで宣言することができます。

修飾子を使用して関数を宣言すると、staticスコープが宣言されたファイルに制限されるため、そうしたくないでしょう。実際には、反対のことをしたいでしょう - それらをextern.hファイルのように宣言して、他のファイルで見えるようにします。

于 2012-12-29T05:05:34.280 に答える
11

いくつかのオプションがあります。

1)クラスの動作を拡張する場合(説明した NSDate 文字列変換メソッドなど)、そのクラスにカテゴリを作成するだけでうまくいく場合があります。

iOS カテゴリのチュートリアルは次のとおりです。

http://mobile.tutsplus.com/tutorials/iphone/objective-c-categories/

重要な注意点:

カテゴリは、別の特定のクラスのインポートにヘッダー (.h) ファイルを含めるかどうかに関係なく、プロジェクト内のあらゆる場所でクラスの動作を変更します (メソッドをオーバーライドする場合)。

このため、通常、カテゴリを介してメソッドをオーバーライドするのではなく、特定のメソッドを変更する場合はサブクラスを作成するのが最善です

ただし、新しいメソッドを追加する場合、カテゴリは非常に便利で便利です。

2)どこにでもインポートされる新しいクラスを作成したい場合は、そのクラスを作成し、そのヘッダーインポートを#import "MyClass.h"プロジェクトのprefix.pchファイル(デフォルトではプロジェクト内の「サポートファイル」グループの下にあります)に入れることができます。

prefix.pchファイルに入力したものはすべて、アプリ内のどこでも使用できます。これは、定数 (文字列など) を配置したり、アプリ内の多くのクラスで使用される列挙型を定義したりするのにも便利な場所です。

これが役立つことを願っています。さらに説明が必要な場合はお知らせください。できる限りお手伝いさせていただきます。

乾杯!

于 2012-12-29T04:44:20.330 に答える
6

もう 1 つのオプションは、ヘルパー メソッドのクラスを作成し、すべてのヘルパーをクラス メソッドとして実装することです。

例: HelperClass.h

+ (NSString *)getFrenchCapital

例: HelperClass.m

+ (NSString *)getFrenchCapital
{
    return @"Paris";
}

次に、ヘルパー クラスを必要な場所にインポートし、クラス メソッドを呼び出すだけです。

例: Foo.m

#import "HelperClass.h"

...

- (void)logFrenchCapital
{
    NSLog(@"Capital of France: %@", [HelperClass getFrenchCapital]);
} 
于 2014-05-20T00:43:00.750 に答える
0

クラスですべての関数を静的にする場合、代わりに、C で行うのと同じように、.m ファイルで関数を定義し、.h ファイルで extern 関数を定義することもできます。

于 2012-12-29T04:35:00.360 に答える