グラフ作成アプリケーションを開発していて、テキストレンダリングを簡単にするためにレンダラーをOpenGLからQuartz2Dに変更しようとしています。
以前は正常に機能していた保持されたNSDateオブジェクトが突然割り当てを解除しているように見え、NSMutableStringがその説明を追加しようとするとクラッシュが発生します(現在は「nil」)。
ビルドと分析では、潜在的な問題は報告されません。
簡略化すると、コードは次のようになります。
NSDate* aDate
-(id)init
{
aDate = [[NSDate date] retain]
return self;
}
-(void)drawRect(CGRect)rect
{
NSMutableString* stringy = [[NSMutableString alloc] init];
//aDate is now deallocated and pointing at 0x0?
[stringy appendString:[aDate description]]; //Crash
}
実際のコードはそれよりもはるかに複雑であり、別のスレッドも日付オブジェクトにアクセスしますが、適切なロックが設定されており、コードをステップスルーするときに[aDate release]
どこにも呼び出されないことを強調する必要があります。
使用し[[NSDate alloc] init]
ても同じ効果があります。また、initが最初に呼び出される関数であることを追加する必要があります。
誰かが私が見落としているかもしれない何か、またはNSDateオブジェクトがそれ自体をリリースしている(またはリリースしているように見える)理由を提案できますか?