A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 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技术分享】关于属性关键字,你又知道多少?(下)


精华推荐:

83 个回复

正序浏览
学习学习
回复 使用道具 举报
关于属性关键字,你又知道多少?
回复 使用道具 举报
多谢分享
回复 使用道具 举报
1adasdad'd'd
回复 使用道具 举报
345678987654345678
回复 使用道具 举报
123456789123456789
回复 使用道具 举报
好好学习下
回复 使用道具 举报
好的,我又来试试了
回复 使用道具 举报
回复 使用道具 举报
666,一直似懂非懂,看看
回复 使用道具 举报
看看应该是不错的
回复 使用道具 举报
weak,assign
回复 使用道具 举报
巩固下基本知识点,都快忘了
回复 使用道具 举报
实就是在编译阶段由编译器自动帮我们生成 ivar 成员变量,getter 方法,setter 方法
回复 使用道具 举报
挺好的,支持吧主的内容,赞一个
回复 使用道具 举报
666                     
回复 使用道具 举报
学习学习
回复 使用道具 举报
很好的解答,给我解答了很久的疑惑
回复 使用道具 举报
万能的楼主啊!!!!!!!
回复 使用道具 举报
12345下一页
您需要登录后才可以回帖 登录 | 加入黑马