Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@takebayashi

NSCellを使ってはいけない

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を進めていくべきでしょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
15
Help us understand the problem. What are the problem?