はじめに
Objective-cで、作ったFrameworkを使ってもらうけど、とある変数はreadonlyにしたい場合があります。ただ、単純に@propertyでreadonlyにしても、Framework内でもreadonlyになってしまって、値代入ができません。
そんな時どうするかを説明したいと思います。
手順
1.Frameworkの利用する側から見えるヘッダクラスには、getメソッドだけ記述します。
(今回はSampleData.hとしました)
| 
					 1 2 3 4 5 6  | 
						// SampleData.h /**  *  サンプル文字列を取得します  *  @return サンプル文字列  */ - (NSString*) sampleString;  | 
					
2..mファイルにgetメソッドを実装します。
| 
					 1 2 3 4 5  | 
						// SampleData.m - (NSString*) sampleString { 	return _sampleString; }  | 
					
ここまでだと、当然ですが変数を宣言していないのでエラーになります。
3.「カテゴリ」を追加する。
これが今回重要なことなのですが、objcにはカテゴリとして、クラスに対して機能を追加できる仕組みがあります。 AAA+BBB.hみたいなやつです、たまに見ますよね。
SampleData+FrameworkPrivate.hという名前で、ヘッダファイルを一つ追加します、このヘッダはFrameworkを利用する側から 見えないようにします。
| 
					 1 2  | 
						// SampleData+FrameworkPrivate.h @property (nonatomic) NSString *sampleString;  | 
					
これを2の.mファイルでimportします。
| 
					 1  | 
						#import "SampleData+FrameworkPrivate.h"  | 
					
こうすることで、ヘッダを利用する側としては、1で作ったgetメソッドしか参照出来なくなります。 Framework内で利用する時は、1のヘッダではなく、3のSampleData+FrameworkPrivate.hをimportして使えばOKです。
最後に
ここまでやりたい人は限られてくると思いますが、調べても中々出てこなかったので書かせて頂きました。




