@property专题
“属性” (property)作为 Objective-C 的一项特性,主要的作用就在于封装对象中的数据。
Objective-C 对象通常会把其所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”(access method)来访问。有了这种严格的命名规范,所以 Objective-C才能根据名称自动创建出存取方法。其实也可以把属性当做一种关键字,其表示:编译器会自动写出一套存取方法,用以访问给定类型中具有给定名称的变量。 所以你也可以这么说: 
@property = getter + setter;
property在runtime中定义如下
typedef struct objc_property *objc_property_t;
而且objc_property是一个结构体,包括name和attributes;定义如下
struct property_t{ const char *name; const char *attributes; }
而attributes本质是objc_property_attribute_t,定义了property的一些属性,定义如下:
typedef struct { const char *name; const char *value; } objc_property_attribute_t;
而attributes的具体内容是什么呢?其实,包括:类型,原子性,内存语义和对应的实例变量。
定义一个string的property@property (nonatomic, copy) NSString *string;,
通过 property_getAttributes(property)获取到attributes并打印出来之后的结果为T@”NSString”,C,N,V_string
其中T就代表类型,C就代表Copy,N代表nonatomic,V就代表对于的实例变量。
完成属性定义后,编译器会自动编写访问这些属性所需的方法,此过程叫做“自动合成”(autosynthesis)。
除了生成方法代码 getter、setter 之外,编译器还要自动向类中添加适当类型的实例变量,并且在属性名前面加下划线,以此作为实例变量的名字。
反编译过相关的代码,发现大致生成了五个东西
OBJC_IVAR_类名属性名称 :该属性的“偏移量” (offset),这个偏移量是“硬编码” (hardcode),表示该变量距离存放对象的内存区域的起始地址有多远。 
setter 与 getter 方法对应的实现函数 
ivar_list :成员变量列表 
method_list :方法列表 
prop_list :属性列表
有两个特定指令:
sythesize:自动生成setter和getter方法,且可指定名称的成员变量
dynamic: 需手动生成setter和getter方法,
copy描述根据下面的来理解即可:
对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;对mutable对象进行copy和mutableCopy都是内容复制。copy后的为不可变对象
- [immutableObject copy] // 浅复制 
- [immutableObject mutableCopy] //深复制 
- [mutableObject copy] //深复制 
- [mutableObject mutableCopy] //深复制 
@property专题的更多相关文章
- [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店
		一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这 ... 
- [转] AE之分级颜色专题图渲染
		原文 AE之分级颜色专题图渲染 参考代码1 private void 分级渲染ToolStripMenuItem_Click(object sender, EventArgs e) { //值分级 I ... 
- 【SPL标准库专题(3)】 Classes
		我把SPL分为四个部分:Iterator,Classes,Datastructures,Function:而其中classes是就是做一些类的介绍(Iterator与Datastructures相关的 ... 
- 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍
		版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645 开发指南专题十四:J ... 
- Spring容器的属性配置详解的六个专题
		在spring IOC容器的配置文件applicationContext.xml里,有一些配置细节值得一提.我们将一些问题归结为以下几个专题. 专题一:字面值问题 配置的bean节点中的值,我们提 ... 
- 【spring专题】spring简介
		前景概要 对于现在的Java开发基本上可以说成是spring开发,spring全家桶可以说是把整个Java web安排的明明白白的.正因为使用的很多,所以作为一名开发者不应该仅仅是会使用spring, ... 
- Spring源码分析专题 —— IOC容器启动过程(上篇)
		声明 1.建议先阅读<Spring源码分析专题 -- 阅读指引> 2.强烈建议阅读过程中要参照调用过程图,每篇都有其对应的调用过程图 3.写文不易,转载请标明出处 前言 关于 IOC 容器 ... 
- Mybatis专题
		Java后端知识点汇总——Java基础专题 全套Java知识点汇总目录,见https://www.cnblogs.com/autism-dong/p/11831922.html 1.什么是Mybati ... 
- jQuery快速入门专题
		jQuery入门专题 本人博客特点:最高重要等级为*****(五红星),依次减少代表重要性相对较低! 一.jQuery简介 jQuery 是一个 JavaScript的一个库,也就是说jQuery是基 ... 
随机推荐
- oracle查看锁表进程,杀掉锁表进程[转载]
			select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, ... 
- mybatis中批量插入以及更新
			1:批量插入 批量插入就是在预编译的时候,将代码进行拼接,然后在数据库执行 <insert id="batchInsert" parameterType="java ... 
- c# 中config.exe 引发的一些问题
			public static void CreateConfig(){ //c#可以添加内置的app.config,我们通过ConfigrationManager类可以 //可以很轻松的操作相关节点,操 ... 
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二:按键模块① - 消抖
			实验二:按键模块① - 消抖 按键消抖实验可谓是经典中的经典,按键消抖实验虽曾在<建模篇>出现过,而且还惹来一堆麻烦.事实上,笔者这是在刁难各位同学,好让对方的惯性思维短路一下,但是惨遭口 ... 
- MFC从资源加载文本
			bool CWizardSheet::GetTextResource(UINT uID, CString& csContent) { HMODULE hModule=GetModuleHand ... 
- 160道Java技术面试题
			1.面向对象的特征有哪些方面?2.访问修饰符public,private,protected,以及不写(默认)时的区别?3.String 是最基本的数据类型吗?4.float f=3.4;是否正确?5 ... 
- 网易云信&七鱼市场总监姜菡钰:实战解读增长黑客在B端业务的运用
			近些年 ,随着互联网的迅速崛起,“增长黑客”一词逐渐映入大众的眼帘,并成为了最热门的话题之一.从2018年开始,线上流量触达天花板,引流之争的激烈程度空前高涨,企业为了获得更多的关注,产品的比拼.流量 ... 
- 文末有福利 | IT从业者应关注哪些技术热点?
			7月14-15日,MPD工作坊北京站即将开幕,目前大会日程已经出炉,来自各大企业的技术专家,按照软件研发中心的岗位职能划分,从产品运营.团队管理.架构技术.自动化运维等领域进行干货分享,点击此[链接] ... 
- 更换title上的ico
			var rurl = "/static/dashboard/img/favicon.ico"; var a = ''; var links = document.getElemen ... 
- F#周报2019年第1期
			新闻 介绍versionsof.net InfoQ正在寻找F#社区的声音 使用F#开发端对端的实际应用 UnoPlatform上的F# Elmish 视频及幻灯片 事件溯源DIY02--事件,事件存储 ... 
