2012年1月10日火曜日

Objective-Cでプロパティを実装して外部クラスからアクセスできるようにする

このエントリーをはてなブックマークに追加
Objective-Cのプロパティとは、オブジェクトが保持する(インスタンス)変数にアクセスする方法を決定する仕組みのことです。アクセス制限を加えたり、getterやsetterなどのアクセサを簡単に扱えるようにすることができるようです。ここでは、外部クラスからインスタンス変数にアクセスできるようにするまでのサンプルをメモしました。



実装方法
1. プロパティの宣言
*.hファイルに次の書式でプロパティを宣言する。
@property (属性)型名 プロパティ名;

属性は、アクセス制限を加えたり、オブジェクトの代入時の操作を記述します。nonatomicであれば同期処理を行わないなどです。


2. プロパティの実装
*.mファイルに次の書式でプロパティを実装する。
@synthesize プロパティ名=インスタンス変数;

また、必要に応じてinitやdeallocで初期化やメモリ解放を実装する。

これで、外部クラスからは"オブジェクト名.プロパティ名"でアクセスできるようになっています。具体例として、Informationクラスにプロパティを実装し、そのプロパティをiPhoneアプリ開発環境を整えるで作成したHelloクラスから利用するように変更しました。

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

@interface Information : NSObject {
    NSString* _description;
}

@property (nonatomic,retain)NSString* description;
@end

Information.m
#import "Information.h"

@implementation Information

@synthesize description = _description;

- (id)init {
    self=[super init];
    if (self) {
        _description=@"";
    }
    return self;
}

- (void)dealloc {
    [_description release];
}

@end

Hello.m
#import "Hello.h"
#import "Information.h"

@implementation Hello

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor=[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    UIFont* font=[UIFont systemFontOfSize:18];
    Information* information = [[[Information alloc] init] autorelease];
    
    information.description = @"Hello World";
    
    [information.description drawAtPoint:CGPointMake(0, 0) withFont:font];
}

@end


実行すると、Hello Worldがちゃんと表示されました。

0 件のコメント:

コメントを投稿