*目次 [#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|


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS