OC-点语法

1、使用点语法代替传统的get方法和set方法

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

再说,如果是直接访问成员变量的话,OC中应该是这样的语法:stu->age,而不是stu.age。

    1. 注意,把原来的int age = [stu age]替换成了int age = stu.age。这两种写法又是完全等价的,stu.age并不是直接访问stu对象的成员变量age,而是编译器遇到int age = stu.age的时候会自动将代码展开成int age = [stu age]
Paste_Image.png
  • OC点语法的本质是方法调用,不是直接访问成员变量。 至于这个点语法代表的是get方法还是set方法,那就取决于你是取值还是设值,取值就是get方法设值就是set方法。

2、点语法与self陷阱

不能用self.变量调用setter方法,这样会造成循环调用。比如:

-(void)setAge:(int)newAge 
{self.age = newAge;
}

这样相当于

-(void)setAge:(int)newAge 
 {[self setAge:newAge];
}

很明显,会造成循环调用setAge:方法,程序就这样崩溃了

3、实例变量名加_, 比如_age

我们可以在声明实例变量时加_,然后getter方法名不加,这样就知道 stu.age确实是调用的age的getter方法,而不是访问了实例变量 _age 了。

参考:http://www.cnblogs.com/mjios/archive/2013/04/08/3006577.htmlv

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,878评论 1 6
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,484评论 18 399
  • 大纲 0.OC数据类型 1.声明一个类 2.实现一个类 3.创建一个对象 4.对象的注意点 5.对象方法 6.类方...
    天天想念阅读 4,809评论 0 3
  • 前一个月,偶然间打开微博,看到大话西游2预计要在4.14号上映,那一刻我就决定要去看一看。 时间一天天的过去...
    阮瑾阅读 3,923评论 0 3
  • 这一段时间过得忙碌而焦躁,心境难以平和,任何时候都压抑着情绪。想要诉诸于人,又担心是自己太过于矫情,生活不都是这...
    我想去遨游太空阅读 1,387评论 0 1

友情链接更多精彩内容