Objective-C语言什么是属性?

示例

这是一个示例类,它具有几个实例变量,而不使用属性:

@interface TestClass : NSObject {

    NSString *_someString;

    int _someInt;

}

-(NSString *)someString;

-(void)setSomeString:(NSString *)newString;

-(int)someInt;

-(void)setSomeInt:(NSString *)newInt;

@end

@implementation TestClass

-(NSString *)someString {

    return _someString;

}

-(void)setSomeString:(NSString *)newString {

    _someString = newString;

}

-(int)someInt {

    return _someInt;

}

-(void)setSomeInt:(int)newInt {

    _someInt = newInt;

}

@end

这是创建简单实例变量的大量样板代码。您必须创建实例变量并创建访问器方法,该方法除了设置或返回实例变量外什么也不做。因此,在使用Objective-C 2.0时,Apple引入了属性,这些属性会自动生成部分或全部样板代码。

这是上面用属性重写的类:

@interface TestClass

@property NSString *someString;

@property int someInt;

@end

@implementation testClass

@end

属性是与自动生成的getter和setter配对的实例变量。对于名为的属性someString,分别调用someString和的getter和setter setSomeString:。默认情况下,实例变量的名称是带有下划线前缀的属性的名称(因此,的实例变量someString称为_someString,但是可以用@synthesize本@implementation节中的指令覆盖此变量:

@synthesize someString=foo;    //names the instance variable "foo"

@synthesize someString;    //names it "someString"

@synthesize someString=_someString;        //names it "_someString"; the default if 

                                           //没有@synthesize指令

可以通过调用getter和setter来访问属性:

[testObject setSomeString:@"Foo"];

NSLog(@"someInt is %d", [testObject someInt]);

也可以使用点表示法来访问它们:

testObject.someString = @"Foo";

NSLog(@"someInt is %d", testObject.someInt);

           

以上是 Objective-C语言什么是属性? 的全部内容, 来源链接: utcz.com/z/321350.html

回到顶部