过了这一关,接着是 ⇒ 熟悉平台类库 ⇒ 研究事件处理 ⇒ 常用控件,然后就能开发APP了 哈哈。
1、#import
#import <ファイル名>
#import "ファイル名"
C言語の#includeとの違いは、一度インクルードされたファイルは再度インクルードされない点です。
2、クラス
・オブジェクト・メソッドの宣言は、頭に「-」
・クラス・メソッドの宣言は、頭に「+」
/* クラスの宣言部 「.h」ファイル */
@interface クラス名 : 親クラス名 {
インスタンス変数の宣言
・・・・・・
}
// プロパティの宣言
@property 変数の型 プロパティ名; // 基本データ型
@property (プロパティ属性)クラス名* プロパティ名; // オブジェクト型
// メソッドの宣言
@end
/* クラスの実装部 「.m」ファイル*/
@implementation クラス名
// プロパティの実装
@synthesize プロパティ名 = インスタンス変数名; // プロパティ名とインスタンス変数名が同じ時は「= インス
タンス変数名」が省略可能
// メソッドの実装
@end
3、プロパティの属性
プロパティの宣言では、プロパティのアクセス方法をプロパティ属性で指定することが可能です。
1)アクセス制限
・readonly
・readwrite
2)オブジェクトを代入する際の操作
・strong (昔のretain): オブジェクトをretainしてから代入
・assign: 渡された値をそのまま代入(デフォルト)
・copy: 渡されたオブジェクトの copyWithZone メソッドを呼び、結果を strong で保持。
・Mutable (変更可能) なオブジェクト
・Immutable (変更不能) なオブジェクト
3)マルチスレッドからのアクセス
・atomic: 生成された getter と setter の中にロック処理が書き込まれる (デフォルト、同期される)
・nonatomic: ロック処理が getter と setter に書き込まれない分、高速に動作する (同期なし)
4、ウィンドウ
ウィンドウはビューやコンポーネントを配置する土台となります。
Macアプリは1アプリが複数ウィンドウを持つことがよくありますが、iPhone/iPadアプリは通常1つだけです。
ビューはウィンドウや他のビューの上に重ねて配置できます。
5、データ型
C言語の基本データ型とObjective-Cで加わったデータ型、
・BOOL
・NSInteger
・NSUInteger
・CGFloat
・id: オブジェクトの参照を保持する型
・SEL: メソッドの参照を保持する型
・IMP: idを戻り値とするメソッドの参照を保持する型
6、文字列
// 置換文字列を使用した生成例
NSString *str = [NSString stringWithFormat:@"%@は%fkmです。", @"フルマラソン", 42.195];
str → "フルマラソンは42.195kmです。"
7、オブジェクトのメモリ管理
リファレンスカウンタを操作するメソッドは、NSObjectに定義されています。
・retain: リファレンスカウンタを1加算
・release: リファレンスカウンタを1減算
・autorelease: 現在の処理(メソッド)を抜けた時に自動的にrelease(抜けてすぐにreleaseの保障がない)
・retainCount: リファレンスカウンタの値を取得
メモリ管理方針
・allocを使う時は「autorelease」
・alloc以外の生成メソッドを使う時は「そのまま」 例:_hoge = [hoge hoge]
(allocとinitを使わないで取得するオブジェクトは、基本的にautoreleaseが指定されていますので)
・インスタンス変数に代入して参照を残す時は「retain」
・インスタンス変数の値を解放する時は「release」
・@"文字列"で生成する文字列はretainやreleaseの必要なし
8、プロトコル
プロトコルは、Java言語におけるインターフェイスと同じ役割を担います。
クラスは複数のプロトコルを実装できるに対して、スーパークラスの多重継承ができません。
/* プロトコルの宣言 「IF.h」ファイル */
@protocol プロトコル名
実装が必須のメソッドの宣言; // キーワードを省略した場合は「@required」になります
・・・
@required実装が必須のメソッドの宣言;
・・・
@optional実装が任意メソッドの宣言;
・・・
@end
/* プロトコルの採用 「機能.h」ファイル */
@interface クラス名 : スーパークラス名 <プロトコル名1, プロトコル名, ...> {
インスタンス変数宣言;
・・・
}
メソッドの宣言;
・・・
@end
/* プロトコルの実装 「.m」ファイル */
9、カテゴリ
メリット
・1つのクラスを複数のクラスに分割したり、クラスに新しい機能を追加したりすることができます。
・CocoaFrameworkで提供しているクラス群に対しても、メソッドを追加できます。
デメリット
・インスタンス変数の追加はできない
・複数のカテゴリで同じメソッドが定義されていた場合にはどのメソッドが呼ばれるかは決められない
/* カテゴリの定義 */
@interface 追加対象クラス名 (追加機能名)
メソッド定義;
@end
/* */
@implementation 追加対象クラス名 (追加機能名)
メソッド実装;
}
@end
10、ARC
自動参照カウント(ARC)。
自動参照カウントは内部的にはretain/release/autoreleaseと同様のメカニズムで動作するが、コンパイル時にメソッ
ドの命名ルール等を見て自動的にretain/release相当のコードを挿入する方式である。これにより、自動参照カウントで
は明示的なretain/releaseがそもそも不可能になる。管理周りのコードの削減に加え、autorelease管理の実行効率が向
上するため、旧方式のプログラムを自動参照カウントに切り替えるだけでもパフォーマンスがいくぶん向上する。