Objective-C言語のメモ書き(5)

2010. 03. 15
プロパティについて、『Objective-C言語のメモ書き(2)』で一度まとめていますが、復習します。

●プロパティ


iPhone SDKプログラミング大全』では『クラスの属性に素早くアクセスできるようにするもの』と書かれているのですが、これが混乱の元だったりします。

というのも、本項では
・クラス内のプロパティ宣言したアクセサメソッド
・プロパティへのアクセス方法(retainやreadonlyなど)
の双方を『属性』と言っているため、話が見え難くなっています。

後者は属性が適切だと思いますが、前者は『要素』などと言い換えた方が良かったと思われます。

インスタンス化したクラス内で使われている変数(言い換えればクラスを構成する要素)を設定または取得するには、本来インスタンスメソッドを使う必要があります。

設定にはsetアクセサ(setter)、取得にはgetアクセサ(getter)というインスタンスメソッドを総称して、アクセサメソッドまたはアクセサ(accesser)と呼びます。

例えばageという変数を使う場合、setterを『- (void)setAge』、getterを『- (int)age』とすると、

- (void)setAge:(int)anAge
{
    age = anAge;
}

- (int)age
{
    return age;

というようなアクセサが必要になり、変数ごとに毎回単純で同じようなアクセサを記述するのが面倒な為、考案されたのがプロパティというものです。

・プロパティの宣言

プロパティはクラス宣言の中で、インスタンス変数宣言の後に行います。

@interface クラス名 : スーパークラス名
{
    (変数型) 変数名 ;
}

@property (プロパティの属性) プロパティ型 プロパティ名;

@end 

・プロパティの実装

プロパティの実装は、クラス実装部内に記述します。

@implementation クラス名

@synthesize プロパティ名;

@end 

・プロパティへのアクセス

インスタンス変数へのアクセスは、構造体のようにドット演算子(.)で行われます。

//クラスのインスタンス化
クラス名 *インスタンス名;
インスタンス名 = [[クラス名 alloc] init];

//プロパティ値の設定(setter)
インスタンス名.プロパティ名 = 値;

//プロパティ値の取得(getter)
型 変数名;
変数 = インスタンス名.プロパティ名;

・プロパティの属性

・アクセス制限に関する属性

readwrite読み取り/書き込み可能(デフォルト)
readonly読み取り専用

・オブジェクトの保持に関する属性

retainretainメソッドで値を保持して変更
assignsetterで単純代入で値を変更(デフォルト)
copycopyメソッドでオブジェクトを複製して値を変更

・アクセサメソッドの名前

gettergetterの名前を設定します
settersetterの名前を設定します

@property (getter = getter名) プロパティ型 プロパティ名;
@property (setter = setter名) プロパティ型 プロパティ名; 

・マルチスレッドからのアクセス

複数のスレッドからプロパティにアクセスする際、データの同期を取るか否かを設定できます。
デフォルトでは同期する(atomic)設定になっています。

nonatomicデータの保証をしない代わりに高速アクセス可能

nonatomicを設定した場合、データの保証はアプリケーション側が行う必要があります。



参考文献

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
(2009/09/08)
木下 誠

商品詳細を見る






bose_soundlink_revolve
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundlink_revolve
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR