スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[エラー][iOS][xxxxxxx respondsToSelector:]: message sent to deallocated instance xxxxxx

結論:delegateをリリースする前にnilを代入しろ。


[xxxxxxx respondsToSelector:]: message sent to deallocated instance xxxxxx


というようなエラーログが発生した場合のお話。

このログを出すにはまずコチラを導入してる必要があります(このブログ内でも一度紹介しました)。
導入されてない方にはEXEC_BAD_ACCESSと出るだけです。

このエラーは「Delegatにメッセージを送ったが既に解放されていた。」というエラーのようです。
今回の原因のソースはこんな感じです。

//ことの始まり
-(void)dealloc{
[super dealloc];
[delegate release];
}


一見問題なさそうなソースですが、このdelegateのリリース処理が実は曲者でした。

delegateは通常selfを入れます(詳しくはこのソースを見て状況を理解してください)。
そのselfってなにが入ってるかというと自身の分身です。
大抵の場合、クラス自身のオブジェクトが入ってるものだと思います。
そいつがdelegateに入った状態でリリースします。つまりこういうことですね。
//つまりこういうこと
delegate = self = "対象のクラス";
[delegate release];


としたことになります。
このあと自分のクラスを参照しようとした時にはすでにreleaseされているため、落ちてしまうというわけです。

今回の解法のヒントをくれた参考URL:
[kamepress]
MKMapViewでクラッシュ
このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。