2016-08-14 4 views
0

代理人が(IBActionメソッド内で)呼び出されてもシミュレータのiPhone 4Sでのみランダムな時間が経過すると、アプリケーションがクラッシュします。他のすべての新しいiPhoneは素晴らしい作品です。代理人のアクセスがiPhone 4Sでのみ

@propert (assign, nonatomic) id <MyDelegate> delegate; 

もちろんARCを使用しています。理由は何でしょうか?

解決済み: 一部の条件で代理メソッドを渡す引数が、意図せずメモリから解放されました。それを強力なタイプに変更することが助けになりました。

+0

主にデッドリファレンスが多いです。いくつかのコード、コールスタック、このデリゲートとMyDelegate protocle宣言を使用するクラスのエラーログを投稿できますか? –

+0

質問したようなコードをいくつか追加しました。 – loup4

答えて

2

理由は、assignを使用しているためです。これは基本的にを意味する "私をクラッシュする"ことを意味します。あなたのdelegateがなくなると、あなたはゴミを指差したままになり、そのゴミにアクセスしようとするとクラッシュするでしょう。実際には、あなたはARCがあなたに与える利点を捨てました。

この利点を回復するには、代わりにweakを使用してください。あなたのdelegateがなくなると、nilとなり、正常に処理されます。

がクラッシュ脱却したので、あなたは今nilをチェックして、あなたは明らかにそれが期待していないときあなたdelegateは存在の外に出た理由を把握しようとすることができます。あなたが見ている問題は、私たちが「診断」と呼んでいることです。デリゲートはずいぶん前に存在しなくなっているかもしれません。あるいは、最初に割り当てられたことはないかもしれませんが、それは完全に別の問題です。