メモリリークには注意が必要です。
特にモバイルデバイスはスペックが低くメモリ不足が起こることが多いので注意が必要。
メモリ不足が起こるとアプリの動作が遅くなったり、突如強制終了してしまうことがある。
メモリ管理を意識せずにプログラミングすると循環参照(ループ)して、メモリリークを発生させてしまう可能性があります。
メモリリークによるバグは潜在的なバグとなるケースが多く、原因の特定が難しく、バグ改善に時間がかかる事がおおい。
なのでメモリ管理を考慮しながらプログラミングする事はアプリの品質を高めるうえでとても重要です。
Objective-Cには2種類のメモリ管理がある
MMR(Manual Retain-Release)
開発者自身が手動でメモリ管理する方法です。
開発者自身でオブジェクトの生死を追跡し、手動で生成し破棄しなければいけません。
「参照カウンタ」というモデルに基づき実装されており、FoundationフレームワークのNSObjectが、実行環境と連携しながら処理を行うようになっています。
ARC(Automatic Reference Counting)
システムが自動でメモリを管理する方法です。
MMRと同じ「参照カウンタ」のシステムをして、メモリ管理に必要なメゾットを呼び出してコンパイル時に自動的に挿入するようになってます。iOS5で初めて導入されたメモリ管理方法です。
MMRではオブジェクトの参照カウンタの操作を全て記述しないといけなかったですが、ARCではこれを自動化することで、コード量の大幅な削減とメモリ管理の煩わしさを解消してます。
AppleからもARCの採用が推奨されています。
ARCの動作しくみ
参照カウンタを使用してますが、オブジェクトに強い参照・弱い参照として、参照カウンタが設定されています。
参照されるとカウンタが増え、参照されなくなるとカウンタが0になります。
強い・弱い参照ではカウントアップの挙動が違います。
//強い参照
NSDate __strong *strongDay;
//弱い参照
NSDate __weak *weakday;
と記述されます。