注意: この記事は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が詳しい。
- 本当は怖いCGFloat – Qiita
- floatだったりdoubleだったりするCGFloatの定数をどう書くか問題 – dendrocopos開発室
iOSやmacOSアプリを開発するときはこのような落とし穴があるので、気をつけたいところである.
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。