LoginSignup
3
4

More than 5 years have passed since last update.

[Objective-C] クラスとインスタンス

Last updated at Posted at 2017-09-21

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;
}

アクセサメソッドはこんな感じで書きますが、毎回これを書くのは冗長です。
propertysynthesizeという記述を使うことで、この記述を省略することができます。

インスタンスメソッドを呼び出してみる

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ではプログラミングの動く仕組みについて、さらなる理解が求められます。
時間はかかると思いますが、しっかりやっていこうと思います!

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4