5

次の Objective-c 2.0 コード スニペットの違いは何ですか (ある場合):

// in MyClass.h
@interface MyClass
@private
    NSString *myString;
@end

// in MyClass.m
@interface MyClass ()
@property (nonatomic, copy) NSString *myString;
@end

@implementation MyClass
@synthesize myString;
@end
4

1 に答える 1

6

ivar (最初のもの) は、それが作成されたインターフェースの実装のスコープ外にアクセスできない単純な変数 ( @private ディレクティブが使用されている場合) であり、合成されたアクセサー メソッドはありません。

プロパティ (2 つ目) はラップされた ivar であり、クラスをインスタンス化することで常にアクセスでき、合成されたアクセサー メソッドを持っています (@synthesize ディレクティブが使用されている場合)。

MyClass *class = [[MyClass alloc] init];
[class setMyString:@"someString"]; //generated setter
NSString *classString = [class myString]; //generated getter
于 2011-12-22T17:33:26.530 に答える