博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
属性(@property)、@synthesize
阅读量:6708 次
发布时间:2019-06-25

本文共 1116 字,大约阅读时间需要 3 分钟。

先前我们学的实例变量是这样的

1 {2     int _age;3     int _height;4     int age;5 }

后来学属性

1 @property int age;

看到@property 会自动编译生成某个成员变量的setter方法和getter方法的声明

1 - (void)setAge:(int) age;2 - (int)age;

举例:

@property int _age;

就会编译生成

- (void)set_age:(int) age;

- (int)_age;

也就是说你怎么写实例变量就会怎么编译生成,为了生成标准的实例变量的setter方法和getter方法的声明,所以属性不要再加 _ 了,并且setAge大写

 

既然使用@property有了实例变量的setter方法和getter方法的声明,那么实现就是@synthesize property

1 // 后面要求写属性,明确要对哪个属性实现一下setter、getter方法2 @synthesize age

看到@synthesize 会自动编译生成某个成员变量的setter方法和getter方法的实现

1 - (void)setAge:(int)age {2   _age = age;  3 }4 5 - (int)age {6   return age;  7 }

如果硬要去访问 _age 那个成员变量,就

@synthesize age = _age;

这样会自动生成age的setter方法和getter方法的实现,并且会去访问_age这个成员变量

注意:左边的age:要实现的是age的setter方法和getter方法

   右边的age:是在实现里去访问_age这个成员变量,所以这样就将属性和实例变量联系在一起了

   系统规定成员变量要加 _ 修饰

 

上面的@synthesize age;没写后面的成员变量,会默认访问age

此时:会自动访问_age这个成员变量,如果不存在,就会自动生成@private类型的_age实例变量,在延展中声明,是私有的

 

XCode4.n之后 @property 即生成声明有生成实现

1 @property int age;

属性是实例变量_age的一对setter、getter方法的声明和实现

默认情况下,setter、getter方法中的实现会去访问 _ 开头的实例变量

 

学到这里,就清楚了为什么一开始我们学的时候成员变量以 _ 开头,其实系统内部是这样的

 

转载于:https://www.cnblogs.com/xs514521/p/5207621.html

你可能感兴趣的文章
从0开始弄一个面向OC数据库(三)--数据库升级,数据迁移,删除数据
查看>>
css面试题实现元素垂直水平居中-包括未知宽高的元素五种回答
查看>>
NDK开发系列第一章
查看>>
『中级篇』容器的技术概述(二)
查看>>
2018年终总结
查看>>
想提高爬虫效率?aiohttp 了解下
查看>>
阿里系统软件迎战“双11”超高流量峰值全纪录
查看>>
锁屏事件监听
查看>>
Flutter 对 iOS、Android(双端开发者)的快速理解(一)
查看>>
个人博客开发系列:文章实时保存
查看>>
javascript模块化发展历程
查看>>
深入Python进程间通信原理--图文版
查看>>
springboot 想用fastjson的话pom一定要改
查看>>
iOS 审核被拒解决方案总结
查看>>
webpack 搭建vue多单页应用
查看>>
基于8.0源码解析:startService 启动过程
查看>>
vue 同页面不同组件数据传递
查看>>
人人都能学会的python编程教程1:第一行代码
查看>>
CIP宣布推出新的超长期支持Kernel,推动自动化、机器学习和人工智能
查看>>
java bean 对象属性复制框架BeanMapping-01-入门案例
查看>>