5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【ぶっちゃけiOSアプリ開発】手っ取り早くObjective-cを理解する | その3 変数とプロパティ

Last updated at Posted at 2017-12-02

細かいことや例外的なことは後回しでいいので、手っ取り早くObjective-cを理解して使い始めたいという人向けです。他言語を経験していることが前提です。
その3は変数とプロパティ(@property)です。

#ローカル変数
メソッド内で使う変数。
メソッドの中で宣言して使う。
#インスタンス変数
インスタンス(クラス)内で使う変数。
@implementationの{}下で宣言する。

QiitaTest.m
#import "QiitaTest.h"

@implementation QiitaTest {
    NSInteger height; // インスタンス変数1
    NSInteger weight; // インスタンス変数2
}

- (void)testMethod {
         :
}

@end

#プロパティ
外部に公開するインスタンス変数はプロパティとして書く。
突き詰めると深みがあるのだが、以下のように宣言して使えばよい。

ヘッダファイルに宣言する。

QiitaTest.h
#import <Foundation/Foundation.h>

@interface QiitaTest : NSObject

@property NSInteger height; // プロパティ1を宣言
@property NSInteger weight; // プロパティ2を宣言

@end

ViewControllerから使う例。

ViewController.m
#import "ViewController.h"
#import "QiitaTest.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    QiitaTest *test = [[QiitaTest alloc] init];
    
    test.height = 174; // heightプロパティにセット
    test.weight = 65; // weightプロパティにセット
    
    NSLog(@"HEIGHT=%ld WEIGHT=%ld", test.height, test.weight); // プロパティをゲット
}

@end

実行結果。

2017-12-02 08:18:48.467 QiitaTest[923:25872] HEIGHT=174 WEIGHT=65

#プロパティをクラス内から使う
クラス内でインスタンス変数として使うときは、プロパティにアンダースコアをつける。

QiitaTest.h
#import <Foundation/Foundation.h>

@interface QiitaTest : NSObject

@property NSInteger height;
@property NSInteger weight;

- (void)consoleWright;

@end

アンダースコア付きインスタンス変数として、クラス内のメソッドから使う。

QiitaTest.m
#import "QiitaTest.h"

@implementation QiitaTest

- (void)consoleWright {
    NSLog(@"HEIGHT=%ld WEIGHT=%ld", _height, _weight); // インスタンス変数として使う
}

@end

ViewControllerからプロパティとメソッドを使う例。

ViewController.m
#import "ViewController.h"
#import "QiitaTest.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    QiitaTest *test = [[QiitaTest alloc] init];
    
    test.height = 174;
    test.weight = 65;
    
    [test consoleWright];
}

@end

#プロパティについてもっと知りたい人

  • Objecitive-c V1までは@propertyは無かった。よってインスタンス変数にアクセスするためには、セッターとゲッターというメソッドをいちいち実装する必要があった。
  • @propertyを使うと、セッター&ゲッターメソッドが省略できて(コンパイラが作ってくれる)、外部から使う時にドット演算子を使って「インスタンス.プロパティ」の形でアクセスすることができる。実は有難い。
  • .hヘッダファイルでpropertyで宣言すると、.m実装ファイル側でインスタンス変数が勝手に実装される(コンパイラが作ってくれる)。その際の名前が「_プロパティ」となる。
  • _付きのインスタンス変数名を使いたくない場合は、@synthesizeを使って別の名前や、プロパティと同じ名前に変更することができる。

###参考URL


ぶっちゃけiOSアプリ開発は、アプリ開発にあたってとりあえず知っておくべきことをズバリ書きます。例外はありますのでご了承ください。

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?