どうもです~。

今日もセミナー予告編やりますよー。


「プロパティの定義」

定義の記述は


@property(プロパティ属性) 型 プロパティ名;


となる。
この定義を書くことで、外部から変数にアクセスできる。
プロパティに対する外部からのアクセス方法は、

インスタンスの変数名.プロパティ

となる。
たとえば、インスタンスaに対して、プロパティpropにアクセスする場合、


a.prop = 5; // プロパティの代入
b = a.prop; // プロパティの取得


となる。

プロパティ名は、インスタンスの内部変数とは別物で、インスタンスに対して
外向けの窓口を設置しているようなもの。

プロパティ属性は、下記のものをコンマ区切りで指定。

nonatomic マルチスレッドによる読み書きチェックをしないで高速化(これはほぼ書く)
readonly 書き込み不可
readwrite 読み書き可能(デフォルト)
strong ARCの場合の定義。代入のタイミングで参照を保持(retainCount++)
week ARCの場合の定義。代入のタイミングで参照を保持しない(retainCount変化せず)
retain ARC無効の場合の定義。代入のタイミングで参照を保持(retainCount++)
copy 代入のタイミングでコピーを作成して保持。NSCopyingが実装されているクラスのみ有効
assign 単純代入。クラスでない変数など。(デフォルト)
getter=メソッド名 プロパティの取得をしたときにメソッドを呼び出す
setter=メソッド名: プロパティの代入をしたときにメソッドを呼び出す







属性をわーって書かれるとなんのこっちゃって感じだけど、
nonatomicはほぼ必ず設定する、あとは、オブジェクトの性質によって、
strongとcopyを使い分ける、くらいわかってれば問題ないと思う。





「 メソッドのオーバーライド」

クラスを継承した場合、同名のメソッドを作り替えて別の動きをさせることもできる。
親クラスのメソッドを書き換えることをメソッドの「オーバーライド」という。

例えば、

ClassAクラスにtestメソッドが定義されているとして、


@interface ClassB:ClassA

@end


@implementation ClassB

- (void)test{
[super test]; // 親クラスの処理を行う場合は記述
追加処理
...
}

@end


と、記述して追加処理を書く。
superは、親クラスのインスタンスを表している。





メソッドのオーバーライドはオブジェクト指向で一番活用される機能かも。。
違うところだけからっぽで親クラスを作っておいて、それぞれの処理を
子クラスでオーバーライドする、なんてのは、まさにオブジェクト指向の醍醐味w



今日は以上です。

ではでは。

↓↓セミナー詳細はこちら↓↓
場所:代々木研修室B1F(代々木駅徒歩1分) http://e-kaigi.eabc.jp/
日時:2013年8月9日(金)19:00-20:30
参加費:500円
定員:20名
詳しくはFBイベントページまで