Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c @属性、setter和getter问题?_Objective C_Cocoa - Fatal编程技术网

Objective c @属性、setter和getter问题?

Objective c @属性、setter和getter问题?,objective-c,cocoa,Objective C,Cocoa,鉴于上述情况,如果我将一个变量设置为另一个变量,我是否应该 NSString *statusValue; NSString *currentValue; @property(retain, nonatomic) NSString *statusValue; @property(retain, nonatomic) NSString *currentValue; @synthesize statusValue; @sythnesize currentValue; 或者我应该再次使用该属性并使

鉴于上述情况,如果我将一个变量设置为另一个变量,我是否应该

NSString *statusValue;
NSString *currentValue;

@property(retain, nonatomic) NSString *statusValue;
@property(retain, nonatomic) NSString *currentValue;

@synthesize statusValue;
@sythnesize currentValue;
或者我应该再次使用该属性并使用

[self setStatusValue: currentValue];
我认为后者虽然可能有点过分,但它确实告诉读者我们使用的是一个对象实例变量,而不是一些局部变量

真的很好奇,我本来想看下面的代码,但只是想在有人看我的代码之前检查一下,到底什么时候:


gary

在我看来,这很有效,而且更具表现力:


self.statusValue=当前值

在我看来,这很有效,而且更具表现力:


self.statusValue=当前值

两者都很好用。你用哪一种可能取决于你想要的副作用。例如,通过使用[self currentValue],您可以发出willAccessValueForKey:和didAccessValueForKey:KVO通知,但前提是有人实际观察到该属性,并且该属性是NSManagedObject子类。通常没有任何严重的副作用


就我个人而言,我可能会使用后一个例子,这样我就不必担心在30个地方更改iVar的名称。如果我决定更改它,当然,在这种情况下使用重构->重命名工具是正确的,但仍然可以。

这两种工具都可以很好地工作。你用哪一种可能取决于你想要的副作用。例如,通过使用[self currentValue],您可以发出willAccessValueForKey:和didAccessValueForKey:KVO通知,但前提是有人实际观察到该属性,并且该属性是NSManagedObject子类。通常没有任何严重的副作用


就我个人而言,我可能会使用后一个例子,这样我就不必担心在30个地方更改iVar的名称。当然,在这种情况下,重构->重命名工具是正确的,但仍然可以使用。

我使用后一个工具,因为没有令人信服的理由不这样做。通过这种方式,它可以在不做任何更改的情况下处理重写的访问器、更改的实现等。例如,我可能决定不再将statusValue存储为字符串,而是存储一个statusValue经过该字符串的状态对象。如果我在各地手动访问ivar,我必须全部更改。相反,如果我要通过类的公共接口,我只需要更改一个访问器方法。

我使用后一种方法,但没有令人信服的理由不这样做。通过这种方式,它可以在不做任何更改的情况下处理重写的访问器、更改的实现等。例如,我可能决定不再将statusValue存储为字符串,而是存储一个statusValue经过该字符串的状态对象。如果我在各地手动访问ivar,我必须全部更改。相反,如果我要通过类的公共接口,我只需要更改一个访问器方法。

在“c”世界中,是的;在obj-c世界中,自Objective-c 2.0开始的编号。状态值=当前值;是[self setStatusValue:currentValue]的语法糖;,也被称为点语法;在obj-c世界中,自Objective-c 2.0开始的编号。状态值=当前值;是[self setStatusValue:currentValue]的语法糖;,也称为点语法。后者,[self currentValue],不必引用实例变量。你真正知道的是它发出了一个信息。该方法可能是property@property的getter,也可能不是。如果是,则该属性可能由实例变量支持,也可能不是。它可能是某种财产,按它的名字来说,这才是真正重要的;如果一个实例变量是您关心访问的,那么您可以直接访问它。后者,[self currentValue],不必引用实例变量。你真正知道的是它发出了一个信息。该方法可能是property@property的getter,也可能不是。如果是,则该属性可能由实例变量支持,也可能不是。它可能是某种财产,按它的名字来说,这才是真正重要的;如果一个实例变量是您关心的访问对象,那么您可以直接访问它。
[self setStatusValue: [self currentValue]];