NSNumber *x = [NSNumber numberWithBool:NO];
NSNumber *y = [NSNumber numberWithUnsignedInt:0];
assert([x isEqual:y]);
assert(x==y);
最初のアサーションは成功し、2 番目のアサーションは失敗します。なぜですか? それらの「objCType」が異なるためですか?isEqual: と == operator の定義の違いは何ですか?
なぜこれを行うのか: API が BOOL ではなく NSNumber を必要とするバックエンドにブール値を保存する必要があるため、保存する前にすべての BOOL を NSNumber に変換する必要があります。その逆も変換する必要があります。