ACAccountとACAccountStoreの関係
ACAccountStoreのrequestAccessToAccountsWithType:withCompletionHandler:でアクセスを要求後、ACAccountStoreのaccountsWithAccountTypeメソッドでACAccountのArrayを取得。
取得したArrayのItemにアクセスすると落ちた。
[array count]は大丈夫だが、[array objectAtIndex:0]だとダメ。
エラーメッセージはコピー忘れたが、
すでに解放済みのオブジェクトにアクセスしてる
のようなエラー。よくReleaseしすぎなオブジェクトにアクセスすると出るアレです。
ACAccountのオブジェクトなんて一度も触ってないし、releaseも一度もしてないのに!と思い少々悩んだ。
結果、エラーメッセージとドキュメント読んだら理解した。
以下、ドキュメント。
Each ACAccount object belongs to a single ACAccountStore object.
結論は、それぞれのACAccountオブジェクトはACAccountStoreオブジェクトに属していて(belong)、ACAccountStoreオブジェクトがautoreleaseで生成してたので、勝手に解放されていた、というオチ。ドキュメントはしっかり読みましょう・・・。
belongしていると、親がいなくなったら子もいなくなるのね。
AssetLibarayとAssetsもこんな関係だったのを思い出した。メモリ管理は慣れない。