关闭

C语言 点语法的总结

173人阅读 评论(0) 收藏 举报
分类:

第一部分  点语法代替中括号的使用


例:

Student *stu = [[Student alloc] init];// 设置age的值

stu.age = 10; // 等价于[stu setAge:10];// 取出age的值

int age = stu.age; // 等价于int age = [stu age];NSLog(@"age is %i", age);


注意:


1)把原来的[stu setAge:10]替换成了stu.age = 10。听清楚了,这两种写法是完全等价的。即这里的stu.age并不是代表直接访问stu对象的成员变量age,而是编译器遇到stu.age = 10的时候会自动将代码展开成[stu setAge:10]

2)把原来的int age = [stu age]替换成了int age = stu.age。这两种写法又是完全等价的,stu.age并不是直接访问stu对象的成员变量age,而是编译器遇到int age = stu.age的时候会自动将代码展开成int age = [stu age]

3)OC点语法的本质是方法调用,不是直接访问成员变量。至于这个点语法代表的是get方法还是set方法,那就取决于你是取值还是设值(也可以理解为点语法是在“=”的左侧还是右侧,左侧:如 stu.age=.... 这就是调用set方法,右侧 ... = stu.age 这就是调用get方法),取值就是get方法,设值就是set方法 


第二部分  点语法陷阱


1)OC中有个self关键字,作用跟this关键字类似。我这么说完,可能有人就会想这样写OCset方法了

- (void)setAge:(int)newAge {

self.age = newAge;}

这绝对是错误的,会造成死循环。因为我在前面已经说过了,OC点语法的本质是方法调用,所以上面的代码相当于

- (void)setAge:(int)newAge {

[self setAge:newAge];}

下面的使用方式也是一个死循环:2)在get方法中,return self.age;相当于是[self age];



第三部分  点语法注意

点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。

特别注意:点语法的本质是转换成相应的setget方法,如果没有setget方法,则不能使用点语法。 


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6892次
    • 积分:304
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类