ばかげた質問かもしれませんが、確認が必要です。
通常、アプリケーション内で複数回使用できるオブジェクトを扱うときは、次のようなアプローチを使用します。
たとえばNSDecimalNumber+Extension
、拡張機能を作成するか、次のように数値フォーマッタが作成されるクラス ユーティリティを作成します。
+ (NSNumberFormatter*)internal_sharedNumberFormatter
{
static NSNumberFormatter* _internal_numberFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_internal_numberFormatter = [[NSNumberFormatter alloc] init];
// other configurations here...
});
return _internal_numberFormatter;
}
+ (NSString*)stringRepresentationOfDecimalNumber:(NSDecimalNumber*)numberToFormat
{
NSString *stringRepresentation = [[self class] internal_sharedNumberFormatter] stringFromNumber:numberToFormat];
return stringRepresentation;
}
たとえば、フォーマッターの作成にはコストがかかるため、このアプローチは非常に優れています。しかし、それは他の状況にも適用できます。
さて、私の質問は次のとおりです。
このアプローチは、異なる実行パス (異なるスレッド) が関係する状況でも有効ですか?
では、最初stringRepresentationOfDecimalNumber
にメイン スレッドで呼び出し、次に別のスレッドで呼び出すと、何が起こるでしょうか?
stringRepresentationOfDecimalNumber
この場合、共有フォーマッタは読み取り専用であるため、異なるスレッドで異なる呼び出しを実行することは有効だと思いますが、専門家からの返信が欲しいです。
前もって感謝します。