Objective-Cは型が弱いのではなく型が少ない


Objective-Cは以下の型を持つ

  • 基本型
    • int
    • float
    • double
    • char
    • など
  • 構造体
  • 配列型
    • 要素数が異なれば型も異なる
  • ポインタ型

NSObjectインスタンスは全てポインタ型

NSObjectインスタンスを格納する変数をスタック領域に確保することは出来ない

// コンパイルエラー
NSObject object;

必ずallocでポインタ型として受け取る必要がある

NSObject *object = [[NSObject alloc] init];

ポインタ型は指し示す先の型が異なっても代入が可能

NSString *str = @"Hello World";
NSNumber *num = str; // warning: incompatible pointer types

int a = 10;
float *f = &a; // warning: incompatible pointer types

異なる型への代入は出来ない

int a = 10;
float b = a; // コンパイルエラー

キャストをする必要がある

int a = 10;
float b = (float)a;

まとめ

Objective-Cは型が弱いのではなく、型が少ない と言えます