トップ «前の日記(2012-07-14) 最新 次の日記(2012-07-17)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|

2012-07-15 [OSX][iOS]クラス拡張

そもそも、クラス宣言にPublic/Privateがあるのは何に対してか?という気がしてきたのだが、Objective-Cで非公開。C言語でいうところのモジュール(ファイル)に閉じた変数/関数を宣言するにはどうするのか?が今回のお話。

ヘッダーファイル。

@interface MyClass : NSObject
 
@property (nonatomic, strong) クラス名 *公開プロパティ;
@property (nonatomic, assign, readonly) float value;
 
- (void)公開メソッド;
 
@end

.mファイル。

@interface MyClass ()
 
@property (nonatomic, strong) クラス名 *非公開プロパティ;
@property (nonatomic, assign, readwrite) float value;
 
- (void)非公開メソッド;
 
@end
 
@implementation Lisp
 
@synthesiz 公開プロパティ = _公開プロパティ;
@synthesiz 非公開プロパティ = _非公開プロパティ;
@synthesiz value = _value;
 
- (void)公開メソッド
{
}
 
- (void)非公開メソッド
{
}
 
@end

非公開にしたいインスタンス変数、プロパティ、メソッドを.mファイル内の名前が空のカテゴリで宣言すれば、非公開のインスタンス変数、プロパティ、メソッドになる。その際、ヘッダーファイルではreadonlyで宣言し、内部ではreadwriteにするという事も出来る。

著者は、これを匿名(無名)カテゴリと思っていたのだが、正確にはクラス拡張と呼ぶらしい。

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2012-07-14) 最新 次の日記(2012-07-17)» 編集