私はまだ Objective-C を使い始めたばかりで、プロパティの作成方法を最近学びました。
次のコードがあるとしましょう:
// myClass.h
@interface myClass : NSObject {
int _startPos;
}
@property (assign, readwrite, setter = setStartPos:, getter = getStartPos) int startPos;
-(void) setStartPos: (int) pos;
-(int) getStartPos;
@end
実装ファイルは自明である必要があります。具体的なことをしようとしているわけではありません。
さて、私はどこかで読んで、実装ファイルにカテゴリを作成し、それにいくつかのメソッドを追加すると、それらのメソッドを myClass.m ファイルの外のものから見えないようにすることができることを実際に試しました。
「よし」と思い、試してみることにしました。
//myClass.m
#import <Foundation/Foundation.h>
#import "myClass.h"
@interface myClass (hidden)
-(void) setHiddenStartPos: (int) hPos;
-(int) getHiddenStartPos;
@end
@implementation myClass (hidden)
-(void) setHiddenStartPos: (int) hPos {
_startPos = hPos;
}
-(int) getHiddenStartPos {
return _startPos;
}
@end
@implementation myClass
-(void) setStartPos: (int) Pos {
[self setHiddenStartPos: Pos];
}
-(int) getStartPos {
return [self getHiddenStartPos]; //this is to see if I can get the value from the hidden methods through the non-hidden ones
}
@end
それはすべて問題なく、 main()でテストすると、名前に「hidden」が含まれるメソッドは実際にはアクセスできないため、プライベートであるかのように動作することがわかります。
次に、これをヘッダーファイルに追加しようとしました:
@property (assign, readwrite, setter = setHiddenStartPos:, getter = getHiddenStartPos) int
プロパティを介して隠しメソッドにアクセスできるかどうかを確認しました
が、そうすると、隠しメソッドがmain()でアクセス可能になり、プロパティを介してのみメソッドにアクセスできるようにする計画全体が無駄になりました
だから私はあなたに尋ねる、メソッドがプロパティやオブジェクト自体にアクセスできないようにする方法はありますか?
編集:ゲッターの名前には通常 get が含まれていないので、コメントするのはやめてください。
また、私が意図したことを強調するために: セッターとゲッターのコンテンツがプロパティ自体にプライベートである c# のようなプロパティを作成したかった
public int exampleProperty
{
set{...}
get{...}
}
メソッドをゲッターおよびセッターとして使用しないため、メソッド内のコードがメソッド自体に対してローカルであるのと同様に、セッターおよびゲッターのコードはプロパティからのみアクセスできます。