@property详细解读
@property 这个关键字、学过iOS的一定会经常用、但是如果你问一个人、@property是干嘛用的? 可能就会有人一脸茫然地问你:”不就是声明属性用的么?” 。这话当然对、那么@property的背后的机制是什么?是如果声明属性?做了哪些事情呢?
在讨论@property这个关键字之前、我们先说下iOS中、是如何声明变量的。
iOS声明变量的方法
在ARC下、生命变量有两种比较常用的方法:
方法一:
@interface ViewController : UIViewController
{@public NSString *price1;
}
@end
方法二:
@interface ViewController : UIViewController@property (nonatomic, copy) NSString *price2;@end
ARC中、很多人应该都是使用方法二了、那么方法一和方法二有什么区别?
@property 是声明一个属性、而在大括号里面是声明一个成员变量。属性可以理解为对外暴露的成员变量、不仅内部可以使用、对外也是可以调用。(是的、即使你在.h中使用大括号中public声明、对外还是不可以引用这个变量)
在使用的过程中、两者也有区别、方法一的变量、可以直接使用
price1 = @"price1";
但是方法二的属性、就必须用self. 或者 _
self.price2 = @"price2";or_price2 = @"price2";
那么、是什么引起了这些不同呢?
答案是:@property会在编译过程、自动给属性增加getter 和 setter方法、从而使属性能够真正拥有属性的特性(被外部读取、使用self.读取)
生成setter 和getter 方法
刚才提到、@property的一个很重要的功能就是自动生成getter和setter方法。我们先看下代码。
这个最简单的getter 和setter方法
- (void)setPrice:(NSString *)price
{_price = price;
}- (NSString *)price{
return _price;
}
上面的方法看起来是没有问题的、但当我们理解了iOS的内存管理之后、很多人就会觉得不太对劲、如果这么写setter和getter方法、内存该乱套了吧。下面说明下property的另外一个用处:内存管理。
内存管理
当我们真正使用@property的时候、其实不会简单的使用
@property NSString *price;
常见的是
@property (nonatomic, copy)NSString *price;
copy等属性、是如何影响内存管理的呢?
如果是copy、setter方法就变成了
- (void)setterPrice:(NSString *)price {_price = [price copy];
}
如此、我们就通过property的属性、实现了内存的管理
综上、property通过自动生成setter和getter方法、并且使用属性、实现了iOS的内存管理。
@property详细解读相关推荐
- 强化学习 - 详细解读DQN(更新完成)
详细解读DQN 一. 强化学习 1. 什么是强化学习问题? 2. 强化学习的理论体系 (1) MDP i) Markov Property ii) Markov Process iii) Markov ...
- NLP突破性成果 BERT 模型详细解读 bert参数微调
https://zhuanlan.zhihu.com/p/46997268 NLP突破性成果 BERT 模型详细解读 章鱼小丸子 不懂算法的产品经理不是好的程序员 关注她 82 人赞了该文章 Goo ...
- VINS-mono详细解读与实现
VINS-mono详细解读 VINS-mono详细解读 前言 Vins-mono是香港科技大学开源的一个VIO算法,https://github.com/HKUST-Aerial-Robotics/V ...
- R回归模型输出结果详细解读:summary、call、residuals、Coefficients、Assessing Model Fit
R回归模型输出结果详细解读:summary.call.residuals.Coefficients.Assessing Model Fit 目录 R回归模型输出结果详细解读:summary.call. ...
- MemCache超详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- CSS 详细解读定位属性 position 以及参数
Css 详细解读定位属性 position 以及参数 position 定位属性,是CSS中非常重要的属性.除了文档流布局,就是定位布局了.本来我对这个问题没有放在心上,毕竟写了这么多年的css,对p ...
- MemCache详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- 直播 | 腾讯天衍实验室张子恒:详细解读天衍实验室知识图谱对齐技术
「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...
- Madgwick算法详细解读
Madgwick算法详细解读 极品巧克力 前言 接上一篇文章<Google Cardboard的九轴融合算法>. Madgwick算法是另外一种九轴融合的方法,广泛应用在旋翼飞行器上,效果 ...
- Transformer详细解读与预测实例记录
文章目录 Transformer详细解读与预测实例记录 1.位置编码 1)输入部分: 2)位置编码部分: 2.多头注意力机制 1)基本注意力机制 2)transformer中的注意力 3.残差和Lay ...
最新文章
- linux加入windows域之完美方案
- autoenv的使用方法
- oracle通信通道的文件结尾_申请被拒?被放到WL?没消息?莫着急,这篇文章助您找到argue信的突破口!...
- Node的Web应用框架Express的简介与搭建HelloWorld
- 计算与推断思维 十七、更新预测
- BZOJ5251 八省联考2018劈配(网络流)
- 测试人员与开发人员沟通的一些问题
- 云服务器上部署pytorch,flask部署pytorch-服务端
- Python命令行版本的员工管理系统
- 计算机信息处理技术员初级难不难,考信息处理技术员之前,这些问题你要知道!...
- dos命令安装windows系统
- 使用IDEA连接hbase数据库
- mysql数据库置疑,sqlserver2000数据库置疑的解决方法
- GREAT-UPD 开源软件使用笔记
- 请更换备份电池 pos机_河南付临门pos机刷卡手续费
- word树状分支图_word树状图怎么做分支
- 微信小程序设置单个页面自定义头部为背景图
- MJPEG和MP4——视频转换随想
- mac(苹果)电脑终端使用技巧
- Win 10上帝模式 的开启和高级隐藏文件