• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
iPhone, iPad アプリ開発勉強会#3
 

iPhone, iPad アプリ開発勉強会#3

on

  • 1,815 views

iPhone, iPad アプリ開発勉強会#3 の為に作成した資料です。

iPhone, iPad アプリ開発勉強会#3 の為に作成した資料です。

Statistics

Views

Total Views
1,815
Views on SlideShare
1,231
Embed Views
584

Actions

Likes
0
Downloads
0
Comments
0

4 Embeds 584

http://d.hatena.ne.jp 568
http://localhost 14
http://app.unreadzero.com 1
https://www.google.co.jp 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    iPhone, iPad アプリ開発勉強会#3 iPhone, iPad アプリ開発勉強会#3 Presentation Transcript

    • iPhone, iPad アプリ開発勉強会#312年12月7日金曜日
    • Objective-Cでの型 文字列 NSString 配列 NSArray ハッシュ NSDictionary テキストフィールド UITextField ボタン UIButton などなど...12年12月7日金曜日
    • 先頭が”NS”ではじまる型はObjective-Cの基本型です。 先頭がUIではじまる型はiOSでのユーザーインターフェースに対する操作、データ取 得等の機能を提供する型です。 iOSの構成 アプリ Cocoa Touch フレームワーク Media(グラフィックスetc) Core Services(データ管理etc) Core OS12年12月7日金曜日
    • よく使う型をいくつかみてみます12年12月7日金曜日
    • 文字列型:NSString /* リテラル(先頭に@を付ける) */ NSString *str = @”こんにちは”; /* 埋め込み */ NSString *name = @”ひろえ”; NSString *str = [[NSString alloc] initWithFormat:@”私は%@です”, name]; /* 連結 */ NSString *str1 = @”わたしは”; NSString *str2 = @”ひろえです”; NSString *str3 = [str1 stringByAppendingString : str2]; /* 文字列の長さ(バイト数ではなくユニコード文字列の文字数) */ NSInteger strlen = [str3 length];12年12月7日金曜日
    • 可変文字列型:NSMutableString NSMutableString型はNSStringに破壊的メソッドを追加したものです。 NSString型のオブジェクトに対してmutableCopyメソッドを呼ぶとNSMutableStringのイ ンスタンスを生成出来ます。 /* 与えられた文字列をもとの文字列に追加する */ NSMutableString *str1 = [@”こんにちは” mutableCopy] ; [str1 appendingString : @”世界”] 結果 => @”こんにちわ世界”; /* 指定範囲を文字列を与えられた文字列で置換する */ NSMutableString *str = @”私はRubyが好きです”; [str replaceCharactersInRange : NSMakeRange(2, 4) withString:@”Objective-C”]; 結果 => @”私はObjective-Cが好きです”;12年12月7日金曜日
    • NSStringでの文字列の連結と /* 連結 */ NSString *str1 = @”わたしは”; NSString *str2 = @”ひろえです”; NSString *str3 = [str1 stringByAppendingString : str2]; NSMutableStringでの文字列の連結の NSMutableString *str1 = [@”こんにちは” mutableCopy]; [str1 appendingString : @”世界”] 結果 => @”こんにちわ世界 違いは...?12年12月7日金曜日
    • NSStringでの文字列の連結の場合 /* 連結 */ NSString *str1 = @”わたしは”; NSString *str2 = @”ひろえです”; NSString *str3 = [str1 stringByAppendingString : str2]; str1 str2 @”私は” @”ひろえです” str3 @”私はひろえです” NSStringでの連結はもとの文字列str1, str2は何も変化せず、両者を連結した新たなオ ブジェクトを作り出します。12年12月7日金曜日
    • 新たなオブジェクトを生成する必要があるので必要な処理を多く、 コストがかかります。 ただし、もとのオブジェクトは何も変化しないので、より安全といえます。12年12月7日金曜日
    • 対して...12年12月7日金曜日
    • NSMutableStringでの文字列の連結の NSMutableString *str1 = [@”こんにちは” mutableCopy]; [str1 appendingString : @”世界”] 結果 => @”こんにちわ世界 str1 str2 @”私は” @”ひろえです”12年12月7日金曜日
    • NSMutableStringでの文字列の連結の NSMutableString *str1 = [@”こんにちは” mutableCopy]; [str1 appendingString : @”世界”] 結果 => @”こんにちわ世界 str1 str2 @”私はひろえです” @”ひろえです” 操作対象のオブジェクトを直接変更します。12年12月7日金曜日
    • 既にあるオブジェクトに対して直接変更を行うので、 速度が速く、消費メモリも少なくてすみます。 ただし、スレッド等使用して同時に処理が行われたりすると再現の難しい不具合を発 生する可能性があります。12年12月7日金曜日
    • 配列:NSArray /* 要素を渡してインスタンスを生成 */ NSArray *array = [[NSArray alloc] initWithObjects:@”helo”, @”world”, nil]; /*指定番目の値を取得 */ NSString str = [array objectAtIndex:1]; 結果:@”world” /* 要素数を取得 */ NSInteger obj_count = [array count]; 結果:212年12月7日金曜日
    • 配列:NSMutableArray NSMutableArray型はNSArrayに破壊的メソッドを追加したものです。 /*末尾に要素を追加 */ NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@”helo”, @”world”, nil]; [array addObject : @”goodbye”]; /*指定番目の値を削除 */ [array removeObjectAtIndex : 2];12年12月7日金曜日
    • 整数: NSInteger 小数 CGFloat, double これらはC言語レベルでのintおよびfloatまたはdoubleと同じです。 マクロで定義してあり... NSIntegerは環境によってintまたはlongになります。 CGFloatは環境によって自動的にfloatまたはdoubleになります。 ほとんどの場合はintやfloatを直接書くよりも、NSIntegerやCGFloatで定義しておいた 方が、コードの再利用生や将来のiOS側の変更に強いコードになりそうです。12年12月7日金曜日
    • ここでひとつ問題が12年12月7日金曜日
    • NSArrayなどの要素として渡せるのは”オブジェクト”です。 たとえば下のようなイメージ。 NSString *str1 = @”こんにちわ”; NSString *str1 = @”世界”; NSArray *array = [[NSArray alloc] initWithObjects : str1, str2, nil] str1 str2 *array = @”世界” @”こんにちは”12年12月7日金曜日
    • でも実際には下のようなイメージ。 *str1 メモリ *str2 546 234 @”世界” @”こんにちは” *array 546, 23412年12月7日金曜日
    • 配列に収まっているのは実際には「オブジェクトの番地」であり、 参照された際には番地をたどってオブジェクトを参照しています。12年12月7日金曜日
    • ところが、オブジェクトは変数にメモリの番地が入っているのに対して NSIntegerやCGFloatなどのC言語レベルの値はメモリに直接値が入ってます。 NSString *str1 NSInteger int1 1003 3 @”こんにちは”12年12月7日金曜日
    • このままではNSInteger型やCGFloat型をObjective-Cの配列に入れる事が出来ません。12年12月7日金曜日
    • そこで。12年12月7日金曜日
    • 配列:NSNumber NSNumber型は数値をラップする型です。Objective-Cの配列やハッシュに値を納める 場合は、一旦NSNumberでくるんでからオブジェクトとして渡します。 /* int型からオブジェクトを生成 */ NSNumber *num1 = [NSNumber numberWithInteger : 5]; /* float型からオブジェクトを生成 */ NSNumber *num2 = [NSNumber numberWithFloat : 5.0f]; /* NSNumber型のオブジェクトで配列を生成 */ NSArray array = [[NSArray alloc] initWithObjects: num1, num2, nil];12年12月7日金曜日
    • 配列:NSDictionary NSDictionary型はハッシュテーブルの機能を提供するクラスです。 Rubyで表現するとこんなかんじのやつ dic = {“name” => “shin”, “age” => 37, “country” => “日本”} /* オブジェクトを生成 */ NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys: @”val1”, @”key1”, @”val2”, @”key2”, nil]; /* 値を参照 */ NSString *str = [dic objectForKey:@”key1”]; 結果:@”val1”12年12月7日金曜日
    • 配列:NSMutableDictionary NSMutableDictionary型はNSDictionary型に破壊的メソッドを追加したものです。 /* オブジェクトを生成 */ NSMutableDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys: @”val1”, @”key1”, @”val2”, @”key2”, nil]; /* キー、値のペアを追加 */ [dic setObject : @”val3” forKey : @”key3”]; /* キー、値のペアを削除 */ [dic removeObjectForKey : @”key3”];12年12月7日金曜日
    • おわり12年12月7日金曜日