iOS Traning 始めてみる

iOS Development Training Course Repository を順に確認してみます。

1.1 Objective C の基礎

いちおうアプリ製造もやったことあんだかんな、と言いつつそれはもう随分昔。

ええと、MixiSampleClass にはメソドを二つ追加しました。

-(BOOL)getIsEnabled
{
    return _isEnabled;
}

-(SampleType)getSampleType
{
    return _sampleType;
}

プロトタイプ宣言を MixiSampleClass.h にも盛り込んでいます (引用略)。
で、ViewController.h の viewDidLoad で以下な記述を追加。あ、MixiSampleClass.h を import もしていますね。

    MceSampleClass *tmp = [[MceSampleClass alloc] initWithName:@"hoge"
                                                    sampleType:SampleTypePiyo];
    NSLog(@"MceSampleClass#name : %@", tmp.name);
    NSLog(@"MceSampleClass#isEnabled : %@", tmp.getIsEnabled ? @"YES" : @"NO");
    NSLog(@"MceSampleClass#sampleType : %d", tmp.getSampleType);

なんか色々忘れててアレ。

1.2 メモリ管理

こちら、最近は自分で retain/release はしなくて良い、という理解で良いのかな。autorelease も含め、このあたりガンだっただけに改善されたのは当然かもしれませんが有り難い。

1.3 UIViewController1 UIViewController のカスタマイズ

ここでハマり中に別件が入ってきて中断。つうかここで何をしてるのかが若干アレ。
敗因は Object Library が何か、が分かんなかったから、なんですが、なんとなくな理解で次へ。

1.4 UIViewController2 ModalViewController

ModalViewController とか delegate とか出てきます。ふむふむ的。Acitivity Stack を自分で片付ける的なカンジですね。資料見てると 1.6 以降って HomeWork ってなってますね。現実トウヒな対応でどこまで行けるか (を

1.5 UIViewController3 ライフサイクル

以下は UIViewController のライフサイクル、とのこと。

  • ViewDidLoad
  • ViewWillAppear
  • ViewDidAppear
  • ViewWillDisappear
  • ViewDidDisappear
  • dealloc

以降は HomeWork ですね。

HomeWork 1.1 ObjectiveC の基本文法

viewDidLoad で色々ヤれ、とのこと。課題1 は以下がでっち上がりました。微妙。

    NSArray *array1 = @[@"list_voice.pl", 
                        @"list_domain.pl", 
                        @"list_mymall_item.pl"];
    NSDictionary *obj1 = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"domain", @"mixi.jp", @"entry", array1, nil];

    NSDictionary *dic21 = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"tag_id", @7, nil];
    NSDictionary *dic22 = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"path", @"add_diary.pl", @"query", @[dic21], nil];
    NSArray *array2 = @[dic22];
    NSDictionary *obj2 = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"domain", @"mmall.jp", @"entry", array2, nil];

    NSDictionary *obj3 = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"domain", @"itunes.apple.com", nil];

    NSArray *array3 = @[obj1, obj2, obj3];

    NSLog@"array : %@", array3);

ええと、

  • ポインタとして定義 (宣言?) するの忘れるとか
  • dictionaryWithObjectsAndKeys に渡す引数列の末端 nil なの知らなんだ

とか色々あったし上記やっぱ微妙感あります。
次の課題2 は机上で云々して来週実装してみましょう。要件としては

  • NSMutableArray で queue (TestQueue) と stack (TestStack) なクラスを作る
  • 以下なメソドを実装せよ
    • -(void)push:(id)object
      • オブジェクトの追加 (queue は末尾に、stack は先頭に)
    • -(id)pop
      • 先頭オブジェクを戻す
    • -(NSInteger)size
      • サイズを戻す

ええと、NSMutableArray には addObject と removeObjectAtIndex というナニがあるのか。末端に追加と先頭削除は可能らしい。removeLastObject というメソドもありますね。
面倒なので属性に先頭のインデクスを持つか。次の pop の対象、と言えば良い?
あら、でも以下な場合、

    NSMutableArray *array = [NSMutableArray arrayWithObjects:
                             @"東京", @"名古屋", @"大阪", nil];

先頭削除したらどうなるのかな。

    [array removeObjectAtIndex:0];
    NSLog(@"array.count : %d", array.count);
    NSLog(@"array[0] : %@", [array objectAtIndex:0]);

確認してみた所、要素数 (count) は 2 でそれぞれ前にずれてました。なかなか賢いですね。これだと実装は楽そうです。
例えば TestQueue だと以下になるのかどうか。
TestQueue.h

#import <Foundation/Foundation.h>

@interface TestQueue : NSObject

@property (nonatomic, strong) NSMutableArray *array;

+(void)initialize
-(void)push:(id)object
-(id)pop
-(NSInteger)size

@end

TestQueue.m

#import "TestQueue.h"

@implementation TestQueue

+(void)initialize
{
    _array = [[NSMutableArray alloc] init];
}

-(void)push:(id)object
{
    [_array addObject:object];
}

-(id)pop
{
    id ret = [_array objectAtIndex:0];
    [_array removeObjectAtIndex:0];
    return ret;
}

-(NSInteger)size
{
    return _array.count;
}

@end

これ、stack なソレだと pop の中身てきに _array.count - 1 なナニを云々、だけの差になるのかどうか。

とりあえず

明日の準備します。