Objective-C 再入門 -1.0.1-

前回の記事が評判良かったので、続編。

そのとき提示したサンプルコードは、実は、もうちょっと obj-c っぽく書ける。

以下のようになる。


#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
#import <stdio.h>
// Person クラスの宣言
@interface Person : NSObject
@property(nonatomic)NSString *name;//ここが変わった!
- (void)printName;
@end
// Person クラスの実装
@implementation Person : NSObject
- (void)printName {
    printf("My name is %s \n", [_name UTF8String]);//_ がついていることに注意
}
@end
// 実行プログラム
int main(void) {
    id person;
    person = [[Person alloc] init];
    [person setName:@"akiba"];
    [person printName];
    return 0;
}

一見して気がつくのは、@property なるディレクティブが出現していることだろう。
そのかわり setName というメソッドが消えた。
想像つくかと思うが、フィールド変数のセッター&ゲッター定義は @property で代用がきく。

なお、nonatomic はスレッドセーフでは「ない」ことを明示するオプション。こんなところでスレッドセーフにしても意味がないので、明示した。(指定しないと atomic になる)

また、@property で生成されるフィールド変数 は先頭に _ がつく。

ここまでくると、何とも obj-c っぽい。

逆に、ここら辺を理解せずに obj-c のコードを読むと、「なんだ、これ?」になると思う。

ところで、アクセサ(セッター・ゲッター)によるカプセル化はオブジェクト指向言語の特徴の一つだろうが、obj-c ではここでもまたディレクティブで対応する方法をとっている。

ここまで徹底しているとなんか清々しいですね(笑)。

 

クリックclose

“Objective-C 再入門 -1.0.1-” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です