在Objective-C中,使用->(箭头运算符)和.(点运算符)访问类中的变量有什么区别?被->用于直接访问VS点(.)不是直接?
小智 21
->是传统的C运算符,用于访问由指针引用的结构的成员.由于Objective-C对象(通常)用作指针而Objective-C类是结构,因此您可以使用它->来访问其成员(通常)对应于实例变量.请注意,如果您尝试从类外部访问实例变量,则必须将实例变量标记为public.
所以,例如:
SomeClass *obj = …;
NSLog(@"name = %@", obj->name);
obj->name = @"Jim";
Run Code Online (Sandbox Code Playgroud)
访问在对象中对应的(或其超类之一)中name声明的实例变量.SomeClassobj
另一方面,.(通常)用作getter和setter 方法的点语法.例如:
SomeClass *obj = …;
NSLog(@"name = %@", obj.name);
Run Code Online (Sandbox Code Playgroud)
相当于使用getter方法name:
SomeClass *obj = …;
NSLog(@"name = %@", [obj name]);
Run Code Online (Sandbox Code Playgroud)
如果name是声明的属性,则可以为其getter方法指定另一个名称.
点语法也用于setter方法.例如:
SomeClass *obj = …;
obj.name = @"Jim";
Run Code Online (Sandbox Code Playgroud)
相当于:
SomeClass *obj = …;
[obj setName:@"Jim"];
Run Code Online (Sandbox Code Playgroud)
mu *_*ort 10
箭头,->是一个点与指针解引用相结合的简写,这两个指针对于某些指针是相同的p:
p->m
(*p).m
Run Code Online (Sandbox Code Playgroud)
箭头符号继承自C和C有它,因为访问operator(.)的结构成员比指针解引用operator(*)更宽松,没有人想要一直写(*p).m,也不想改变运算符优先级以使人们写*(p.m)取消引用结构内的指针.因此,添加箭头,这样你可以两者都做p->m,并*s.p没有括号的丑陋理智.
| 归档时间: |
|
| 查看次数: |
5841 次 |
| 最近记录: |