2

一意のデバイスIDを読み取るための次のコードがあります。これは20以上の異なるビュー(.mファイル)で使用されるので、これを行うためのクリーンで効率的な方法があるかどうか疑問に思っています。だから私は3つのオプションを考え出します:

オプション1:これらのコードを実行する必要がある場所にコピー/貼り付けするだけです。これはこれを行うための最悪の方法だと思います。

オプション2:AppDelegate.mに配置します。これにより、これらは起動ごとに1回だけ実行されます(私が正しければ、わずかな時間を節約できる可能性があります)。次に、必要なときにいつでも文字列「stringDeviceID」を呼び出します。

オプション3:別のクラスを作成し、これらのコードをクラス関数に取り込みます。ただし、これには、毎回コードを実行するという「問題」があります。

そして私の質問は、私が行かなければならない最良/より良いオプションはどれですか?そして、これらのどれよりもさらに良い別のオプションがある場合は、私に知らせてください。前もって感謝します。

NSString *stringDeviceID;

if ([UIDevice instancesRespondToSelector:@selector(identifierForVendor)])
{
    stringDeviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
else
{
    stringDeviceID = [[UIDevice currentDevice] uniqueIdentifier];
}
4

1 に答える 1

3

UIDeviceのカテゴリとして実装します。

@iumplementation UIDevice (backwardCompatibleIdentifier)
- (NSString *)backwardCompatibleIdentifier {
    // your code
}
@end

次に、あなたがしなければならないのは:

NSString *myid = [[UIDevice currentDevice] backwardCompatibleIdentifier];

これを20回呼び出すことによるパフォーマンスのコストが、実際のパフォーマンスに違いをもたらすかどうかは真剣に疑っています。心配な場合は、テストしてください。問題がある場合、実装内にキャッシュを固定できます。呼び出しcurrentDeviceが遅すぎる場合でも、インスタンスメソッドの代わりにクラスメソッドにすることができます。

1つを除いて、他の選択肢はほとんど合理的です。これを20回コピーして貼り付けないでください。ある時点で、あなたはそのuniqueIdentifier呼び出しを削除したいと思うでしょう(Appleがあなたを強制したからか、あるいは単にiOS 5との互換性を落としたいからかどうかにかかわらず)。OpenUDIDまたはその他のサードパーティライブラリを追加することをお勧めします。何をするにしても、19か所で変更するのではなく、1か所で変更できるようにしたいのですが、6か月後に忘れた1か所をデバッグします…</ p>

于 2013-03-25T18:56:50.617 に答える