過了這一關,接著是 ⇒ 熟悉平台類庫 ⇒ 研究事件處理 ⇒ 常用控制項,然後就能開發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管理の実行効率が向
上するため、舊方式のプログラムを自動參照カウントに切り替えるだけでもパフォーマンスがいくぶん向上する。