1

なぜ多くのフラグメントコードでインスタンス変数を何のために宣言するのですか? 有権者と非有権者の違い

#import <Foundation/Foundation.h>

@interface class1:NSObject

{
   NSMutableString *currentData;
}
@property (nonatomic, retain) NSMutableString * currentData;
4

1 に答える 1

1

表示されたのは「古いコード」ですが、古いバージョン (10.5 など) をサポートする必要がある場合もあります。

プロパティは単純に getter と setter の組み合わせです (そうですね.. 選択する属性によって異なります。たとえば、readonly は getter のみを生成します)。しかし、プロパティはインスタンス変数を操作します (したがって必要です)。通常、実装ファイルに表示されるのは次のようなものです

@implementation class1
@synthesize currentData = currentData;
@end

これは、 currentData を変数として使用するゲッターとセッターを作成することを意味します。

新しいバージョンでは、インスタンス変数を作成する必要はなく、プロパティを入力してステートメントを合成するだけです。最新の言語バージョンでは、synthesize ステートメントさえ必要ありません。_propertyName(アンダースコア + プロパティの名前) という名前のインスタンス変数が自動的に作成されます。

ところで: 独自のゲッターやセッターを作成する必要がある場合もあります。従来の命名規則が適用されます (- (void)setCurrentData: (NSMutableString*)newData;セッターと- (NSMutableString*)currentData;ゲッターなど) が、プロパティについては以前と同じ規則があります。最新の OS のみをサポートする場合は、@propertyステートメントを記述し、「アンダースコア付き」変数を使用してゲッターとセッターを正しくすることができます。 .

于 2013-09-13T07:00:23.077 に答える