*目次 [#fef4b967] #contents *概要 [#a6b9ac56] -iPhone開発の仕方 *参考 [#s63ac0e8] -[[http://www.atmarkit.co.jp/ait/articles/1303/13/news023_2.html]] *開発環境設定 [#xc44f9a9] -キーチェーンアクセスを起動->証明書アシスタント->証明書を認証局に要求 -ios provisioning portalから証明書を要求(iOS Developを選択) -ダウンロードした証明書をダブルクリックして、キーチェーンに追加する --ここで得られた証明書はどこかネット上で管理しておくと楽。 -そうすると繋げば開発ができるようになる。 *エリア [#le531dd1] **ナビゲータエリア [#h9f3e856] |プロジェクトナビゲータ|ファイルごとに参照| |シンボルナビゲータ|C: Class, M: Methodなどで参照| |検索ナビゲータ|プロジェクト全体から検索可能| |問題ナビゲータ|エラー・警告| *注意点 [#j7a12401] -ObjectiveC++は面白くない。 --型に対する扱いの難易度が上がる。STLなど使えて便利。でもリテインカウントが雑魚かったり、基本良くない。 --Objective Cは、new(に相当するもの)の引数によって、オブジェクトの型が変わるなどが起きる。インターフェースが同じなら大体同じ。 *文法 [#i024266b] **インスタンスメソッドとクラスメソッド [#o0123c7c] -"-"をつけるとインスタンスメソッドとなり、インスタンス化しないと利用できない。 -"+"をつけるとクラスメソッドとなり、インスタンス化しなくても使える **Obj-Cのパブリック [#b6fe50f7] -.hファイルに書かれたinterfaceがpublicになり、.mファイルに書かれたinterfaceがprivateになる。 --.mファイルのimplementationの中に書かれていてかつ.hには書かれていないメソッドもprivateになる。 @interface Person () @end *C言語との対比 [#m7d6b3c3] |C|Obj-C|h |親クラスがなくてよい|親クラスを省略して記述できない| |include|import(ヘッダブロック不要!)| |ryo->name|ryo.name(アクセサを介す場合)| |引数にラベルをつけられない|引数にラベルをつけて、なんの引数に対するデータなのかがわかる| |printf("test");|NSLog(@"test");| |string|NSString*| |sprintf|[NSString stringWithFormat:@"%@ 様", _name]| |%s|%@| |this|self| |なし|super(親クラスの変数にアクセス)| **クラス [#kae5748d] ***アクセサ以外の実装 [#td10bbbd] -例 --person.h #import <Foundation/Foundation.h> @interface Person : NSObject { // 名前 NSString *_name; } - (NSString *)name; - (void)setName:(NSString *)name; @end --person.m #import "Person.h" @implementation Person - (NSString *)name { return _name; } - (void)setName:(NSString *)name { _name = name; } @end --使うとき Person *ryo = [[Person alloc] init]; [ryo setName:@"Hamko"]; NSLog(@"名前は%@です", [ryo name]); ***ゲッタ・セッタの実装 [#x4825490] -propertyを使う。 --内部変数は_nameなど、_が前につくものとなる。 --外部からアクセサ(ゲッタ・セッタ)を明示的に使う場合は、getName, setNameなど、get, setが前につく上に変数の頭が大文字となる。 -例 --person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic) NSString *name; // 内部変数は_name @property (nonatomic) NSInteger age; // 内部変数は_age @end --person.m #import "Person.h" @implementation Person - (NSInteger)age // propertyの変数を直接関数名として、アクセサを上書き可能 { return _age*2; // 内部変数は_age } @end --使うとき Person *ryo = [[Person alloc] init]; ryo.name = @"Hamko"; // [ryo setName:@"Hamko"]; NSLog(@"名前は%@です", ryo.name); *よく見る構文 [#y0551e05] |[super viewDidLoad];|親クラスで定義されているviewDidLoadメソッドを実行して| |符号付整数|NSInteger, int| |符号無整数|NSUInteger, uint| |浮動小数点型の数値|float, double| |真理値|BOOL, bool, Boolean| |