ARCって楽だと思ったら、メモリリークしてる

deallocが呼ばれないので調べてみると、巡回参照が生じているらしい。IBOutletを指定したらretainしないと思ってたら、間違いだったようだ。

以下のように、__weak指定して、巡回参照を押さえてdeallocを呼ばれるようにした。

@interface RMDocument : NSDocument
{
    NSMutableArray* employees;

    IBOutlet __weak NSTableView*       tableView;
    IBOutlet __weak NSArrayController* employeeController;
}

ARCの導入でコーディング量は減ったけど、考え方は変わらない。 手続き的な表記から宣言的な表記に変わったと理解して@interfaceを書く時にメモリ管理を考えるようにするとよいのかもしれない。

もう一度、@synthesizeとか@propetyの書き方を調べ直さないとダメだな。