代码之间有什么区别:
[[self label] setText:@"Hello"];
[label setText:@"Hello"];
如果我从班级里面打电话给他们,他们基本上是一样的吗? 因此,如果我从另一个类调用它,那将是:
[[someclass label] setText:@"Hello"];
someclass.label.text = @"Hello";
这是对的吗?这种自我让我迷失方向。
答案 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;