なぜ多くのフラグメントコードでインスタンス変数を何のために宣言するのですか? 有権者と非有権者の違い
#import <Foundation/Foundation.h>
@interface class1:NSObject
{
NSMutableString *currentData;
}
@property (nonatomic, retain) NSMutableString * currentData;
なぜ多くのフラグメントコードでインスタンス変数を何のために宣言するのですか? 有権者と非有権者の違い
#import <Foundation/Foundation.h>
@interface class1:NSObject
{
NSMutableString *currentData;
}
@property (nonatomic, retain) NSMutableString * currentData;
表示されたのは「古いコード」ですが、古いバージョン (10.5 など) をサポートする必要がある場合もあります。
プロパティは単純に getter と setter の組み合わせです (そうですね.. 選択する属性によって異なります。たとえば、readonly は getter のみを生成します)。しかし、プロパティはインスタンス変数を操作します (したがって必要です)。通常、実装ファイルに表示されるのは次のようなものです
@implementation class1
@synthesize currentData = currentData;
@end
これは、 currentData を変数として使用するゲッターとセッターを作成することを意味します。
新しいバージョンでは、インスタンス変数を作成する必要はなく、プロパティを入力してステートメントを合成するだけです。最新の言語バージョンでは、synthesize ステートメントさえ必要ありません。_propertyName
(アンダースコア + プロパティの名前) という名前のインスタンス変数が自動的に作成されます。
ところで: 独自のゲッターやセッターを作成する必要がある場合もあります。従来の命名規則が適用されます (- (void)setCurrentData: (NSMutableString*)newData;
セッターと- (NSMutableString*)currentData;
ゲッターなど) が、プロパティについては以前と同じ規則があります。最新の OS のみをサポートする場合は、@property
ステートメントを記述し、「アンダースコア付き」変数を使用してゲッターとセッターを正しくすることができます。 .