LoginSignup
16
15

More than 5 years have passed since last update.

NSCellを使ってはいけない

Posted at

NSCellは今後非推奨となります。新たに使用するのは控えましょう。

NSCellが非推奨になる経緯

NSCellは元来、重厚で多機能なNSView(のサブクラスのNSControl)の描画部を軽量なオブジェクトとして独立させることでリソースを節約することを目的としていました。NSTableViewやNSMatrixといった大量のUI部品を並べるビューは、大量のサブビューを並べることによるオーバーヘッドが大きかったため、代わりに軽量なセルを並べることでこれを回避するというスタイルが採られました。

しかし、それは前世紀の話です。OS Xの時代になると、ハードウェアの進歩によってビューのオーバーヘッドは微々たるものになりました。実際、iOSのCocoa touchではUIControlからセルを分離していませんが、Macよりスペックの低いハードウェア上で問題なく動作しています。

セルはビューと比べて制約があるため、凝ったインターフェイスを作成しようとすると非常に手間がかかり、また扱いも面倒です。パフォーマンス上のメリットが得られないとなれば、セルを使用する動機はなくなります。

OS XではLeopardで大量のビューを並べるNSCollectionViewが導入され、LionでNSTableViewがビュー・ベースのテーブルをサポートするなど、セルではなくビューをそのまま扱うことで高い表現力を実現できるように進化するとともに、徐々に脱セルの動きが進められてきました。

そして、WWDC 2014にて、ついに将来的にNSCellを非推奨とすることが宣言されました。

段階的な非推奨

Yosemiteでは、まだNSCellは明示的にdeprecatedとはなっていません。

NSCellの非推奨化はCocoaにおいて非常にインパクトがあるため、NSCell本体はすぐには非推奨にはならず、NSCellを利用する周辺のAPIから段階的に非推奨となっていくようです。したがって、カスタムコントロール、カスタムセルを作成している場合、すぐに動かなくなるといったことはないでしょう。

Yomiseteではまず、- [NSControl cell]など、コントロールからセルにアクセスするための各種メソッドやプロパティはすべて非推奨となりました。セルを外部から操作している場合は、セルを直接操作するのではなく、対応するコントロールのメソッドを呼び出して操作するように修正しましょう。

また、セル・ベースのNSTableViewは非推奨になりました。今後はビュー・ベースのNSTableViewを使用するようにしましょう。NSBrowserなどの類似のUIコンポーネントも同様です。

NSMatrixは、明示的に非推奨とはされていませんが、セルを並べるだけのコンポーネントであるという性質上、新規開発においてこれを使用するべきではないでしょう。NSMatrixのサブクラスで、もともとあまり使用されてこなかったNSFormは非推奨になりました。

まとめ

将来的にNSCellがdeprecatedとなる予告がなされただけで、Yosemiteではまだdeprecatedとはなっていません。APIとして実際に廃止された後も内部実装としてしばらくは残り続けるでしょう。

しかし、コントロールのセルにアクセスする手段の多くはYosemiteで非推奨となり、また(NSTableViewのように)かつてセルしか受け付けていなかったビューコンポーネントは今ではビューを受け付けるようになっています。かつてNSCellのメソッドをオーバーライドしなければ実現できなかったことの多くは、現在ではNSControlだけでも実現できるようになっています。

NSCellは、その役目を終えました。これから新規開発する場合にはNSCellを使用せず、また既存アプリの場合には少しずつ脱NSCellを進めていくべきでしょう。

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15