[iOS] 変数と型 2 | プログラミング初心者向けObjective-C入門

2013/04/15

今回は型について説明します。

型って?

まずはプログラムを使わずにたとえ話で。

————
ノートがあります。
そこにメモを各教科ずつ書き込んでいきます。

1回メモを取るのに必要なページ数は
国語は 1P
数学は 4P
社会は 4P
だとします。

1) 各教科ごとに1度確保したページは、別の教科で使うことは禁止とします。例えば、国語用に確保したページは、数学では使えません。

2) メモを1回とるときに、1Pしか使わなかったとしても、次にメモをとりはじめるときは、上のページ数分確保しておいて新しく書き始めます。例えば数学で、2P書き込んでも、残り2Pは空白のページのままにしてから、また4P確保して書き始めます。
————

これをプログラムで置き換えてみます。

————
メモリがあります。
そこにデータを各変数ごとに書き込んでいきます。

32bit CPUのとき
1文字型 char の変数は 1バイト
整数型 NSInteger の変数は 4バイト
実数型 CGFloat の変数は 4バイト
必要となります。

1) 1度確保したある型の変数を別の型用に使うことを基本禁止します。例えばchar用に確保したものはCGFloatに使うことは駄目です。(実際には型を変換することで使える場合が多くありますが、ここでは説明を簡単にするためにそうしています)

2) 一度確保したメモリはそのバイト数分確保されてから、次の変数用に新しく確保されます。
————

こんな感じに、プログラム上でどんな用途に使うか記述するのが型となります。
1)と2)の説明がありますが、1)が重要です。2)の部分はiOS開発アプリ開発ではあまり意識することがないので忘れて大丈夫です。

参考)バイトとビットについて前に書いた記事があったので、リンクを貼っておきます。
>> [C] Cでのバイトとビット入門

どんな型の種類があるの?

型は自分で定義することができるのでそれこそ無限にありますが、基本となる型は少ないです。

Objective-Cで基本となって、よく使われる型

型名 概要 出力フォーマット
NSInteger 整数 -100, -5, 0, 1, 8, 100 32bitCPUのとき %d
64bitCPUのとき %ld
CGFloat 実数 -323.5, 0.5, 1.8, 1028.6 %f
BOOL 真偽値 YES, NO %d
NSString* 文字列 @”Hello” %@
Objective-Cオブジェクト Objective-Cオブジェクト NSDate*, NSString*, NSLocale* %@

実際にそれぞれの型の変数を宣言して出力してみます。プログラムはこうです。

        NSInteger num1 = 3;
        NSLog(@"num1 = %ld", num1);
        
        CGFloat num2 = 0.36;
        NSLog(@"num2 = %f", num2);
        
        BOOL mybool = YES;
        NSLog(@"mybool = %d", mybool);
        
        NSString *str1 = @"sample";
        NSLog(@"str1 = %@", str1);
        
        NSDate *now = [[NSDate alloc] init];
        NSLog(@"now = %@", now);

出力結果

num1 = 3
num2 = 0.360000
mybool = 1
str1 = sample
now = 2013-04-15 00:54:43 +0000

各型についての説明は長くなるので次回にしたいと思います。表の一番最後についている出力フォーマットについてだけ説明します。

NSLogのフォーマット

変数の出力をするときにNSLogを使います。その場合に、出力フォーマットに書かれている文字列を書きます。
今はmac用のプロジェクトなのでNSIntegerは64bitCPU用の%ldを使いますが、iOSアプリ開発では32bitCPUなので%dを使います。

        NSLog(@"文字列だけの場合");
        
        //変数を1つだけ出力。その際に対応する出力フォーマットを最初に書きます
        //その後カンマをふってから変数を書きます
        NSInteger num1 = 12;
        NSLog(@"num1 は %ld です", num1);
        
        //変数を2つ出力。1番目の変数の後にカンマをふって2番目の変数を書きます
        CGFloat num2 = 7.3;
        NSLog(@"num1 = %ld で num2 = %f です", num1, num2);
        
        //変数が3つ以上の場合も同様です
        NSString *mystr = @"晴れ";
        NSLog(@"%@ : %f : %ld", mystr, num2, num1);

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る