Objective-Cを始めました。
クラスとインスタンスについて学んだことをまとめてみます。
まだ1週間しか経っていないので、間違い等あると思います。
ご指導の程よろしくお願いしますm(_ _)m
#まず基本
まず基本ですが、Objective-Cは以下のimport
文から始まります。
#import <Foundation/Foundation.h>
クラスや変数の宣言は、この下に書くか、.h(headerファイル)にまとめます。
#クラスの定義
@interface Dog : NSObject
{
@private
int height;
int weight;
}
@property int height, weight;
@end
@implementation Dog
@synthesize height, weight;
+(void)nakigoe
{
NSLog(@"犬の鳴き声は一般的に「ワンワンです」");
}
@end
こんな感じで書きます。
変数を宣言するinterface文
と、メソッドを定義するimplementation文
の両方が必要です。
@private
はカプセル化といい、これらのインスタンス変数へのアクセス権限を設定できます。
このようにカプセル化した変数はクラス外からアクセスできないため、アクセサメソッドというものを使って表示したり変更したりします。
#アクセサメソッド
-(int)getHeight
{
return height;
}
-{int)getWeight
{
return weight;
}
アクセサメソッドはこんな感じで書きますが、毎回これを書くのは冗長です。
property
とsynthesize
という記述を使うことで、この記述を省略することができます。
#インスタンスメソッドを呼び出してみる
int main(int argc, const char * argv[])
{
@autoreleasepool {
Dog *dog_A = [[Dog alloc] init];
[dog_A setHeight:100];
[dog_A setWeight:500];
NSLog(@"犬Aの高さは地面から%d、体重は%dです。",
[dog_A height], [dog_A weight]);
[Dog nakigoe];
}
return 0;
}
メソッドの呼び出しはこんな感じです!
メッセージ文というものを使って、実行します。
[
レシーバ メソッド名:引数]
という具合に書きます。
上のコードでは、@property
で定義された4つのメソッドを呼び出しています。
Dog *dog_A = [[Dog alloc] init];
この記述でDog
のインスタンスを生成しています。
alloc
はメモリ確保のメソッドらしいです。
init
は初期化メソッドです。
Dog *dog_A
このアスタリスクがとても大事で、これはC言語のポインタという概念に通じるようです。
基本型と参照型というものがあるそうですが、今のところよくわかりません。
main
関数、メモリ管理のための@autorelesepool
、謎のreturn 0
…………
この辺は意味不明ですね! 今はそういうものだとしか分かりません。
#以上です!
もうちょっと色々あると思いますが、まとめきれそうにないので、いったん終わります。
Rubyからプログラミングを始めた自分としては、今まであまり意識せずにやってきたことが多いですが、Objective-Cではプログラミングの動く仕組みについて、さらなる理解が求められます。
時間はかかると思いますが、しっかりやっていこうと思います!