@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详细解读相关推荐

  1. 强化学习 - 详细解读DQN(更新完成)

    详细解读DQN 一. 强化学习 1. 什么是强化学习问题? 2. 强化学习的理论体系 (1) MDP i) Markov Property ii) Markov Process iii) Markov ...

  2. NLP突破性成果 BERT 模型详细解读 bert参数微调

    https://zhuanlan.zhihu.com/p/46997268 NLP突破性成果 BERT 模型详细解读 章鱼小丸子 不懂算法的产品经理不是好的程序员 ​关注她 82 人赞了该文章 Goo ...

  3. VINS-mono详细解读与实现

    VINS-mono详细解读 VINS-mono详细解读 前言 Vins-mono是香港科技大学开源的一个VIO算法,https://github.com/HKUST-Aerial-Robotics/V ...

  4. R回归模型输出结果详细解读:summary、call、residuals、Coefficients、Assessing Model Fit

    R回归模型输出结果详细解读:summary.call.residuals.Coefficients.Assessing Model Fit 目录 R回归模型输出结果详细解读:summary.call. ...

  5. MemCache超详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  6. CSS 详细解读定位属性 position 以及参数

    Css 详细解读定位属性 position 以及参数 position 定位属性,是CSS中非常重要的属性.除了文档流布局,就是定位布局了.本来我对这个问题没有放在心上,毕竟写了这么多年的css,对p ...

  7. MemCache详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  8. 直播 | 腾讯天衍实验室张子恒:详细解读天衍实验室知识图谱对齐技术

    「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...

  9. Madgwick算法详细解读

    Madgwick算法详细解读 极品巧克力 前言 接上一篇文章<Google Cardboard的九轴融合算法>. Madgwick算法是另外一种九轴融合的方法,广泛应用在旋翼飞行器上,效果 ...

  10. Transformer详细解读与预测实例记录

    文章目录 Transformer详细解读与预测实例记录 1.位置编码 1)输入部分: 2)位置编码部分: 2.多头注意力机制 1)基本注意力机制 2)transformer中的注意力 3.残差和Lay ...

最新文章

  1. linux加入windows域之完美方案
  2. autoenv的使用方法
  3. oracle通信通道的文件结尾_申请被拒?被放到WL?没消息?莫着急,这篇文章助您找到argue信的突破口!...
  4. Node的Web应用框架Express的简介与搭建HelloWorld
  5. 计算与推断思维 十七、更新预测
  6. BZOJ5251 八省联考2018劈配(网络流)
  7. 测试人员与开发人员沟通的一些问题
  8. 云服务器上部署pytorch,flask部署pytorch-服务端
  9. Python命令行版本的员工管理系统
  10. 计算机信息处理技术员初级难不难,考信息处理技术员之前,这些问题你要知道!...
  11. dos命令安装windows系统
  12. 使用IDEA连接hbase数据库
  13. mysql数据库置疑,sqlserver2000数据库置疑的解决方法
  14. GREAT-UPD 开源软件使用笔记
  15. 请更换备份电池 pos机_河南付临门pos机刷卡手续费
  16. word树状分支图_word树状图怎么做分支
  17. 微信小程序设置单个页面自定义头部为背景图
  18. MJPEG和MP4——视频转换随想
  19. mac(苹果)电脑终端使用技巧
  20. Win 10上帝模式 的开启和高级隐藏文件

热门文章

  1. 对许多张图片进行批量裁剪,看看我是如何快速做到的
  2. Python之——网站访问流量统计
  3. 《女生宿舍第二部》(1-46上) 转贴
  4. linux虚拟网卡卸载,virbr0虚拟网卡如何卸载?virbr0虚拟网卡的卸载方法
  5. Beamer Template
  6. 力扣-多线程专项(一)(按序打印、交替打印、打印零与奇偶数)
  7. 有什么方法可以免费查重呢?
  8. 亮度、对比度与饱和度
  9. CentOS 5遇到Partition table entries are not in disk order
  10. windows10桌面_变身iOS?让Windows 10的桌面和苹果一样美