在目标c中访问成员变量

时间:2012-09-28 09:38:55

标签: objective-c

代码之间有什么区别:

[[self label] setText:@"Hello"];
[label setText:@"Hello"];

如果我从班级里面打电话给他们,他们基本上是一样的吗? 因此,如果我从另一个类调用它,那将是:

[[someclass label] setText:@"Hello"];
someclass.label.text = @"Hello";

这是对的吗?这种自我让我迷失方向。

4 个答案:

答案 0 :(得分:1)

self是指向对象上调用该对象的对象的指针。

[label setText:]可能会直接访问实例变量。所有其他方式都通过访问方法。

答案 1 :(得分:0)

是的,两种方式都是正确的。在

someclass.label.text = @"Hello";

您正在直接访问该物业

[[someclass label] setText:@"Hello"];

您正在使用setter方法为您设置由目标C创建的文本属性的值。

但我更喜欢set方法。但使用财产没有错。

答案 2 :(得分:0)

自我只是向您展示标签或您拍摄的任何内容属于当前类的方式。 self只会告诉你实体属于你声明它的同一个当前类,或者为它分配一些值。

如果你将该标签分配给其他类是另一回事。

答案 3 :(得分:0)

混淆源于@synthesize默认情况下会生成一个与该属性同名的iVar。

[[self label] setText:@"Hello"];行将访问该媒体资源label并在其上调用setText

[label setText:@"Hello"];将访问iVar label并致电setText

不同之处在于,当您使用iVar时,您在属性上设置的任何设置(原子,复制,保留等)将不受尊重。

如果您没有任何特殊原因,通常最好使用该属性。通过使用;

将iVar与其他名称合成,可以更容易记住这一点
@synthesize label = _label;