0

代码有什么区别:

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

如果我从课堂上调用它们,它们基本相同是否正确?因此,如果我从另一个班级调用它,它将是:

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

它是否正确?这个自我让我迷失方向。

4

4 回答 4

1

self是指向已调用该方法的对象的指针。

[label setText:]大概会直接访问实例变量。其他方式都通过访问器方法。

于 2012-09-28T09:43:50.277 回答
0

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

someclass.label.text = @"Hello";

您正在直接访问该属性

而在

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

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

但我更喜欢 set 方法。但是使用属性并没有错。

于 2012-09-28T09:44:13.223 回答
0

自我只是向您展示 Label 或您采取的任何东西属于当前班级的方式。self 只会告诉您该实体属于您声明它或为其分配一些值的同一当前类。

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

于 2012-09-28T09:45:11.523 回答
0

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

[[self label] setText:@"Hello"];线路将访问该属性label并调用该属性setText

[label setText:@"Hello"];访问 iVarlabel并调用setText它。

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

如果您没有任何特别的理由不使用该属性,通常最好只使用该属性。您可以通过使用另一个名称合成 iVar 来使这更容易记住;

@synthesize label = _label;
于 2012-09-28T09:47:05.017 回答