Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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 设置值-实例变量_Objective C_Instance Variables - Fatal编程技术网

Objective c 设置值-实例变量

Objective c 设置值-实例变量,objective-c,instance-variables,Objective C,Instance Variables,我正在学习Objectice-c,我注意到我可以用两种方式设置instace变量的值 @interface Foo : NSObject @property int x; -(void)print; @end @implementation Foo -(void)print { [self setX:10] // first way x = 10; // second way } @end 我个人更喜欢第一种方法,因为它看起来更清晰。在我的项目中使用第一种方法可

我正在学习Objectice-c,我注意到我可以用两种方式设置instace变量的值

@interface Foo : NSObject
  @property int x;
  -(void)print;
@end

@implementation Foo

 -(void)print
 {
   [self setX:10] // first way
   x = 10; // second way 
 }
@end

我个人更喜欢第一种方法,因为它看起来更清晰。在我的项目中使用第一种方法可以吗?

您可以通过两种方式访问变量:

将setter或getter与self一起使用:

self.x = 10;
[self setX:10]
两者都是等效的,但苹果建议您将setter与self一起使用

或者直接访问ivar。ivar名称取决于您如何合成它。如果使用默认的合成(或您自己不合成),则如下所示:

_x = 10;
在您的示例中,第二种方法是直接访问ivar,第一种方法是使用setter(与self.x=10相同)

建议使用第一种方法(使用self或setter),因为它可以解决内存问题、释放以前的值、保护线程(如果需要)等等,而且使用self更舒适。而不是打电话给塞特


只有在使用init方法时才使用ivar,其余部分使用setter。

init
dealloc
之外使用setter。在这两种方法中直接使用ivar。