目标C – 无法工作@属性/ @综合设置和获得者?

我知道这是一个新手问题,但我不能得到我的头(或真的,我不能得到它的工作)

所以我有我的

@interface NSString *test; @end; @property NSString *test 

在我的

 ... @synthesize test; ... 

但我想要一个自定义的testing器 – 什么是正确的语法?

谢谢

首先,如果您计划使用@synthesize ,则不需要声明variablestest ,但是如果您这样做,则需要将其放在花括号中。

其次,财产的声明需要在界面之内:

 @interface { NSString *test; } @property (readwrite) NSString *test @end; 

最后,setter的语法是

 -(void)setTest:(NSString*)test { ... } 

如果你select重写getter,那么约定是

 -(NSString*)test { return test; } 

简单的用定义创build一个方法

 - (void) setTest:(NSString*) new_value 

这是在您尝试修改testing属性的值时将被调用的方法(您可以根据其他属性名称更改此属性)。

请记住,只有当您尝试修改self.test(属性)时才会调用此方法 – 如果直接修改testingvariables,则不会调用setTest。 将非属性variables命名为其他名称是很好的做法(前面带有下划线_test是常见的),并将您的合成语句引用它:

 @synthesize test = _test; 

这将访问self.test得到_test的值,并修改self.test调用你的setTest方法。 如果你想重写getter,这就有了定义

 - (NSString*) test 

如果你的自定义setter有一个不同于setTest:的方法名(假设属性名是test ),你可以使用下面的方法指定setter:

 @property(readwrite,setter=setShokolokobangoshay:) NSString *test; 

那么如果你有:

 object.test = @"SomeValue"; 

它会自动“翻译”到:

 [object setShokolokobangoshay:@"SomeValue"]; 

否则,即使使用@synthesize指令(在这种情况下,@ @synthesize指令只会实现一个getter),您也可以简单地提供一个setTest:方法,并将自动用作该属性的setter。