Objective-C 「再入門」と書いて再び入門!


ちょっと前にお勉強しようと思って挫折した iOS + Objective-C を次の会社で使うかも(?)しれないので再度お勉強します。

で、覚えられないのでしょうもないコードをつらつら書きます。(誤字があったりしたらごめんなさい)

あと今使ってる Wordpressプラグインだとシンタックスハイライトが効かなそうなんだけど、誰か何かおすすめ教えてください(´・ω・`)

WP-CODEBOXというプラグインを発見しました!

文字列データ

//自分で作って自分で使って自分でリリース!

NSString *str = [[NSString alloc] initWithString:@"ほげほげ"];

//処理

[release str]

//オートリリースを1行で!

NSString *str = [[[NSString alloc] initWithString:@"もげもげ"] autorelease];

//処理

//もっと短く!

NSString *str = [NSString stringWithString:@"おーとりりーす"];

//処理

文字データの削除や追加は NSMutableString を使うらしい

php の sprintf 的なあれ

文字列 + ◯◯

//string + int

int score = 100;

NSString *str =

[NSString stringWithFormat:@"あなたは、%d点です", score];

NSLog(@"%@", str);//あなたは、100点です

//string + float

float tmp = 36.5;

NSString *str =

[NSString stringWithFormat:@"体温は、%f度です", tmp];

NSLog(@"%@", str);//体温は、36.500000度です

//string + float(小数点以下一桁)

NSString *str =

[NSString stringWithFormat:@"体温は、%.1f度です", tmp];//%.1fと書くらしい

NSLog(@"%@", str);//体温は、36.5度です

//これにのっとって %2d とかやれば整数の桁を省略できるかと思ったらできなかった

//string + string

NSString *name =

[NSString stringWithString:@"かみぴー"];

NSString *str =

[NSString stringWithFormat:@"私の名前は、%@です", name];

NSLog(@"%@", str);//私の名前は、かみぴーです

Objective-Cで文字列連結|技術者もどきの備忘録

Objective-Cで数値から文字列への変換、文字列から数値への変換 - ugon105の日記

配列

普通に格納

NSArray *arr = [NSArray arrayWithObjects: @"a", @"b", @"c", nil];

NSLog(@"%@", arr);

//

最後に格納する nil がないとエラー

NSArray *arr = [NSArray arrayWithObjects: @"a", @"b", @"c"];

NSLog(@"%@", arr);

//Thread 1: Program received signal: "EXC_BAD_ACCESS"

配列の個数

NSArray *arr =

[NSArray arrayWithObjects: @"A", @"B", @"C", @"D", nil];

NSLog(@"%d", arr.count);//4

番号指定で呼び出す

NSArray *arr =

[NSArray arrayWithObjects: @"A", @"B", @"C", @"D", nil];

NSLog(@"%@", [arr objectAtIndex:0]);//A

NSLog(@"%@", [arr objectAtIndex:1]);//B

追加、削除は NSMutableArray を使うらしい

phpでいう連想配列的な

普通に格納

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

@"kamip", @"name",

@"30", @"age",

@"kanagawa", @"address",

nil];

NSlog(@"%@", dict);//{address = kanagawa; age = 30; name = kamip;}

値、キー、値、キー、値、キー、値、キー、...,nil でセットする

キー、値を全て調べる

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

@"kamip", @"name",

@"30", @"age",

@"kanagawa", @"address",

nil];

NSLog(@"%@", dict.allKeys);//{age, name, address}

NSLog(@"%@", dict.allValues);//{30, kamip, kanagawa}

キーワードから読み出す

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

@"kamip", @"name",

@"30", @"age",

@"kanagawa", @"address",

nil];

NSLog(@"%@", [dict objectForKey:@"name"]);//kamip

NSLog(@"%@", [dict objectForKey:@"age"]);//30

NSLog(@"%@", [dict objectForKey:@"address"]);//kanagawa

なんかこう関数なのかプロパティなのか...

if文!

文字列比較

NSString *a = [NSString stringWithString:@"aaa"];

NSString *b = [NSString stringWithString:@"aaa"];

if( a == b ){

NSLog(@"%@", @"同じです");

} else {

NSLog(@"%@", @"異なります");

}

//同じです

文字列を違う方法で作った場合の比較

NSString *a = [NSString stringWithString:@"aaa"];

NSString *b = [NSString stringWithFormat:@"%@", @"aaa"];

if( a == b ){

NSLog(@"%@", @"同じです");

} else {

NSLog(@"%@", @"異なります");

}

//異なります

作り方が違うとアドレスが異なる?作り方が同じだとアドレスが一緒?ん??

NSString *a = [NSString stringWithString:@"aaa"];

NSString *b = [NSString stringWithFormat:@"%@", @"aaa"];

if( [a isEqual:b] ){

NSLog(@"%@", @"同じです");

} else {

NSLog(@"%@", @"異なります");

}

//同じです

Java の String と似た感じ?

Switch文!

int i = 5;

switch(i){

case 1:

NSLog(@"%@", @"1やん");

break;

case 3:

NSLog(@"%@", @"3やん");

break;

case 5:

NSLog(@"%@", @"5やん");

break;

default:

NSLog(@"%@", @"デフォルトやん");

}

//5やん

普通!

while文

while(条件式){

//処理

}

普通す[php]ng="objc" line="N" colla="+">

for(int i[/php]< 10; i++){

//処理

}

普通なので(ry

まとめ

配列・連想配列の書き方とか[]の使い方とか気持ち悪いけど、whileやらforやらは他の言語とだいたい同じ。メモリの管理は autorelase は推奨されていないようなんだけど、じゃあなんで存在しているの?とか思いつつ、次はクラスのことを勉強しよう。

ちなみに「よくわかる iPhoneアプリ開発の教科書」を参考にしています。これで分からなかった部分は、前に購入した「詳解 Objective-C 2.0」を参照しながら進めていくつもり。

なんかサンプルとかいきなり見たほうが早いかも?とか思ったりもするけど、せっかく時間あるし、地道にやろうかな。

参考書

詳解Objective‐C 2.0/荻原剛志

詳解Objective‐C 2.0/荻原剛志
価格:3,990円(税込、送料別)