NSIntegerとCGFloatの実体は・・・

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

これはどちらかというと、Objective-Cで気をつけなければならないことであるが、NSIntegerとCGFloatの実体はmacOSやiOS端末によって違いがある。正確には、32bit版のOSが動いているか、64bit版のOSが動いているかどうかで変わってくる。

まず、NSIntegerだが、これはlong型のtypedefである。macOS及びiOSではC/C++における整数型には気をつけよで言及しているデータ型モデルで言えば、32bitでは「ILP32」、64bitでは「LP64」が採用されていることから、32bitでは32bit整数、64bitでは64bit整数となる。

次に、CGFloatだが、この実体は32bitではfloat型、64bitではdouble型のtypedefとなっている。このことによって、思わぬバグの原因となっていることに注意が必要である。詳細については以下のURLが詳しい。

iOSやmacOSアプリを開発するときはこのような落とし穴があるので、気をつけたいところである.

タイトルとURLをコピーしました