1

私は ObectiveC の初心者ユーザーなので、考えられる回答はシンプルにしてください。私は C と C++ でかなりの数の経験があります。

ここで、ObjectiveC を使用して、プロパティを使用せずに 2 つのオブジェクトを作成したいと考えています。私の質問は、「どうすれば違うのか」ではなく、「ここで何が悪いのか」です。だから私のコードがあります:

@implementation News

NSString *_title;
NSString *_excerpt;
NSString *_content;
NSString *_thumbnailURL;
NSString *_date;

-(id)initWithTitle:(NSString *)title excerpt:(NSString *)excerpt content:(NSString*)content thumbnail:(NSString *)thumbnailURL date:(NSString *)date {
    self = [super init];
    if (self) {
        _title = [[NSString alloc] initWithString:title];
        _excerpt = [[NSString alloc] initWithString:excerpt];
        _content = [[NSString alloc] initWithString:content];
        _thumbnailURL = [[NSString alloc] initWithString:thumbnailURL];
        _date = [[NSString alloc] initWithString:date];
    }
    return self;
}

-(void)showData {
    NSLog(@"    title:%@", _title);
    NSLog(@"    excerpt:%@", _excerpt);
    NSLog(@"    thumbnailURL:%@", _thumbnailURL);
    NSLog(@"    date:%@",  _date);
    NSLog(@"    getContent:%@", _content);
}
@end    

ここで、2 つのオブジェクトを作成します。

News *nws = [[News alloc] initWithTitle:@"title1" excerpt:@"excerpt1" content:@"content1" thumbnail:@"thumbnail1" date:@"date1"];
News *nws2 = [[News alloc] initWithTitle:@"title3" excerpt:@"excerpt3" content:@"content3" thumbnail:@"thumbnail3" date:@"date3"];

その後、このオブジェクトの中にあるものを表示したい:

[nws showData];
[nws2 showData];

その結果、両方のオブジェクトの内部の値が同じになります。すべて「3」で終わりました。nws オブジェクトには「1」で終わる値が含まれ、nws2 には「3」で終わる値が含まれると思いました。しかし、それはそのように機能していません。なんで?エラーはどこにありますか? 助けてください、ありがとう!

4

2 に答える 2

2

ツイッターで聞いて、@Bavariousから次のコメントをもらいました。

https://gist.github.com/11c22c0edea5391a3799(太字で追加)

@interface … {}またはの外部で宣言@implementation … {}された変数は、通常のC変数として扱われます。あなたの例で_excerpt は、は静的ストレージ期間を持つグローバル(ファイルスコープ)変数であり 、2つのメソッドの実装前@interface、実装間@interface、実装間で同等にファイルの先頭に配置できます。これは、ファイルスコープ変数が@implementationCは機能ブロックの外で定義されます。

静的な保存期間を持つ変数は、Objective-Cには存在しない概念であるクラス変数を実現するために使用できます。

于 2013-01-16T14:02:16.797 に答える
2

変数はglobal variables(インスタンス変数ではなく) として定義されます。これが、インスタンスから参照される同じ値を持つ理由です。

それらを {} に埋め込むことは、あなたの場合の可能な解決策です。

于 2013-01-16T10:45:11.247 に答える