黑马程序员技术交流社区

标题: 【iOS技术分享】关于属性关键字,你又知道多少?(上) [打印本页]

作者: Simpon    时间: 2016-5-6 17:17
标题: 【iOS技术分享】关于属性关键字,你又知道多少?(上)
本帖最后由 Simpon 于 2016-10-27 10:32 编辑


开篇声明:本文是想各位同学们说明一下有关创建成员变量时,各个属性的意义以及一些偏底层的知识,大多数需要了解,因为面试官一般都会问到。首先说明一下定义一个成员变量时,@property是干什么的。

一、@property

@property 其实就是在编译阶段由编译器自动帮我们生成 ivar 成员变量,getter 方法,setter 方法。
使用“自动合成”( autosynthesis)这个过程由编译器在编译阶段执行自动合成,所以编辑器里看不到这些“合成方法”(synthesized method)的源代码。除了生成 getter、setter 方法之外,编译器还要自动向类中添加成员变量(在属性名前面加下划线,以此作为实例变量的名字)。为了搞清属性是怎么实现的,反编译相关的代码,他大致生成了五个东西:
  1. OBJC_IVAR_$类名$属性名称        // 该属性的“偏移量” (offset),这个偏移量是“硬编码” (hardcode),表 示该变量距离存放对象的内存区域的起始地址有多远
复制代码
实际流程:




接下来说一道常见的笔试题。
二、readwrite,readonly,assign,retain,copy,nonatomic,atomic,strong,weak属性的作用分别是什么。
三、什么情况使用 weak 关键字,相比 assign 有什么不同?

首先明白什么情况使用 weak 关键字?
   在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如:weakassign 的不同点



四、使用 atomic 一定是线程安全的吗?
答案很明显。不是,atomic 的本意是指属性的存取方法是线程安全的,并不保证整个对象是线程安全的。
举例:



当然,关于属性关键字所引出的技术点及问题不只如此.如需了解更多,请点击【iOS技术分享】关于属性关键字,你又知道多少?(下)


精华推荐:
黑马程序员:为苹果与iOS开发者的前景正名
与君共勉 --- 记黑马22期同学成长经验。
【持续更新】2016年最全最新的iOS视频+软件+源码+面试/技术
关于iOS 10最新的课程视频及demo第三弹,火速发布了

作者: Wangyk    时间: 2016-5-6 23:30
非常值得观看,在下谢谢楼主
作者: Simpon    时间: 2016-5-9 09:09
Wangyk 发表于 2016-5-6 23:30
非常值得观看,在下谢谢楼主

不用客气 都是朋友
作者: wendaogds    时间: 2016-5-9 23:43
谢谢楼主,这么好的资源
作者: fkcong    时间: 2016-5-10 10:07
多谢分享~~~
作者: 18316761642    时间: 2016-5-13 16:23
关于属性关键字,你又知道多少?(上)
作者: luffy99    时间: 2016-5-17 10:53
楼主强强强
作者: heima_heimahaha    时间: 2016-5-20 20:50
好好好好
作者: zyp1343832    时间: 2016-5-27 16:44
看完全贴,学习学习
作者: 1937362521    时间: 2016-5-27 17:56
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
作者: Casslte    时间: 2016-5-28 19:40
这么好的资源
作者: 云飘雾散    时间: 2016-6-13 21:15
这个困惑好久了
作者: wodetaoshu    时间: 2016-6-19 13:55
如获至宝,非常感谢
作者: yangqiangyang    时间: 2016-7-4 22:45
看看............
作者: 浪子党    时间: 2016-7-5 19:36
66666666666666
作者: qqikufei    时间: 2016-7-18 22:52
很给力啊 顶一个
作者: TaoT    时间: 2016-7-19 11:42
关于属性关键字,你又知道
作者: gdutyong    时间: 2016-7-19 16:06
66666666666666
作者: CalvinCheung    时间: 2016-9-20 08:55
学习一下
作者: HuyaRC    时间: 2016-11-2 21:50
分享,很不错,完美的,有用
作者: 有无相生    时间: 2016-11-7 10:01
厉害了 我的鸽
作者: Vincent丶L    时间: 2016-11-13 15:59
6666666666666

作者: poi1234bnm    时间: 2016-11-19 18:27
学习。。很多很陌生
作者: 乔布永    时间: 2016-11-22 14:13
还非得回复 服了
作者: SmallOrange    时间: 2016-11-22 17:57
好东西!!!!!!!!!!!!!!!!!
作者: weiboyuan    时间: 2016-11-23 10:48
looklooklook
作者: wq920111    时间: 2016-11-23 14:16
2iwdwdenewwwwwwwww
作者: geniuswen    时间: 2016-12-1 17:02
学习了学习了学习了
作者: 妍飞凤舞    时间: 2016-12-6 17:59

分享,很不错,完美的,有用
作者: floating_dream    时间: 2016-12-6 18:36
谢谢楼主
作者: 赫连    时间: 2016-12-9 23:18

作者: 大大说    时间: 2016-12-12 16:48
范文芳请问服务器饿器服务器我企鹅问
作者: 小宇文    时间: 2016-12-28 10:01
一直纠结这个问题含糊不清,学习学习
作者: 小宇文    时间: 2016-12-28 10:02
一直纠结这个问题含糊不清,学习学习
作者: awenlovelearn    时间: 2016-12-28 17:58
想学习啊
作者: awenlovelearn    时间: 2016-12-28 17:58
想学习啊
作者: awenlovelearn    时间: 2016-12-28 17:59
想学习啊
作者: jin_1102    时间: 2016-12-29 16:40
我要学习一下!
作者: jin_1102    时间: 2016-12-29 16:41
我要学习一下!
作者: jin_1102    时间: 2016-12-29 16:42
我要学习一下!
作者: zhang987    时间: 2016-12-29 16:43
好东西,先mark
作者: 我狂者    时间: 2017-2-17 17:26
我是菜鸟啊
作者: 我狂者    时间: 2017-2-17 17:26
qq123456789
作者: 花开~的季节    时间: 2017-2-17 17:40
是的是的
作者: ghyg527    时间: 2017-2-27 09:15
66666666666666
作者: robin1210    时间: 2017-2-27 11:14
好资源,从头开始深入了解
作者: Hzming    时间: 2017-3-6 14:34
回复可见!!!
作者: 森林水滴    时间: 2017-3-7 20:38
感谢分享
作者: sdlwwl0728    时间: 2017-3-30 11:10
滴滴滴滴滴滴滴滴滴地
作者: baowuwolf    时间: 2017-3-30 13:20
看看是不是原著,内容不错,收藏了
作者: misscxuan    时间: 2017-3-31 12:52
给力给力给力给力给力给力给力给力
作者: 664095924    时间: 2017-4-3 19:33
henhaoya hahaha
作者: fuxi    时间: 2017-4-27 17:23
学习学习,感谢分享,谢谢
作者: JLX    时间: 2017-5-4 16:20
-------------------------
作者: 18150091472    时间: 2017-5-11 16:18
黑马文章写得很好,值得看~
作者: べ戀¢豬そ☆    时间: 2017-5-16 21:49
看看大牛怎么写的
作者: ZakZhou    时间: 2017-5-24 09:28
哈哈哈哈哈哈哈
作者: shashaliu    时间: 2017-6-5 16:04
dsgteewgtwqtwetw
作者: 半心lang    时间: 2017-6-20 15:10
sdgfasdfsadfasdf
作者: zhangyuze    时间: 2017-7-12 15:46
沙发沙发大幅
作者: wilon    时间: 2017-7-19 12:56
隐藏的内容是什么到底有没有用
作者: yu123321    时间: 2017-7-19 20:40
使用 atomic 一定是线程安全的吗?
答案很明显。不是,atomic 的本意是指属性的存取方法是线程安全的,并不保证整个对象是线程安全的。
举例:
作者: Minecode    时间: 2017-7-25 13:56
很棒的教程
作者: 阿西巴    时间: 2017-9-6 17:49
万能的楼主啊!!!!!!!
作者: janyjany    时间: 2017-9-14 00:03
很好的解答,给我解答了很久的疑惑
作者: 茶无此名    时间: 2017-9-14 15:27
学习学习
作者: newkey1000    时间: 2017-11-12 01:36
666                     
作者: a1137611824    时间: 2017-11-23 21:05
挺好的,支持吧主的内容,赞一个
作者: redstar110    时间: 2017-11-28 17:12
实就是在编译阶段由编译器自动帮我们生成 ivar 成员变量,getter 方法,setter 方法
作者: magicqqwe    时间: 2017-11-30 16:34
巩固下基本知识点,都快忘了
作者: mcmilo    时间: 2017-12-6 16:13
weak,assign
作者: skyz1125    时间: 2018-1-5 15:23
看看应该是不错的
作者: Haley_SJ    时间: 2018-1-8 11:52
666,一直似懂非懂,看看
作者: 因为太有钱    时间: 2018-1-24 09:33

作者: 苏明明    时间: 2018-2-22 15:36
好的,我又来试试了
作者: luodongdong    时间: 2018-4-10 17:22
好好学习下
作者: wolfhous    时间: 2018-4-11 14:11
123456789123456789
作者: wolfhous    时间: 2018-4-11 14:19
345678987654345678
作者: hughhh    时间: 2018-4-25 10:19
1adasdad'd'd
作者: baby14    时间: 2018-7-18 07:52
多谢分享
作者: 清爽柠檬汽水    时间: 2018-10-22 15:40
关于属性关键字,你又知道多少?
作者: GunBusterV    时间: 2018-10-22 17:45
学习学习





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2