5

私は次のようなiOSアプリを開発しました。

NSError *error; 

それ以外の:

NSError *error = nil;  

シミュレーターでデバッグし、接続中にデバイスでデバッグしている間は、正常に機能しました。アーカイブしてTestFlightに送信し、テスト用にデプロイした瞬間、クラッシュログに 不明なシグナルエラーが表示され始めました。

なぜこれが起こるのですか?

4

2 に答える 2

6

これは、初期化されていないポインタがあるために発生します。運が良ければクラッシュしませんが、そのようなポインタを使用することは未定義の動作です。

于 2012-02-25T14:30:36.957 に答える
3

dasblinkenlightsの答えを明確にするために、これは変数を宣言しています。

NSError *error; 

...そしてこれは変数の宣言と割り当てです

NSError *error = nil;  

最初の方法で使用し、何かに設定せずにアクセスしようとすると、それが指している値は「ガベージ」と呼ばれます。これは他のメモリスタックへのポインタであり、アクセスするとほとんどの場合、アプリがクラッシュします。したがって、上記のように、またはその直後に変数に値を割り当てることが常にベストプラクティスです。

于 2012-02-25T14:57:39.060 に答える