1 属性和实例变量 :属性 ==  实例变量声明 + setter 方法+ getter 方法

  在老版本的 OC 语言中,我们需要同时声明属性和底层实例变量,那时,属性是 OC 语言的一个新的机制,并且要求你必须声明与之对应的实例变量。

  后来,苹果将默认编译器从 GCC 转换为 LLVM(low level virtual machine),从此不再需要为属性声明实例变量了。如果 LLVM发现没有一个匹配属性的实例变量,它将自动创建一个以下划线开头的实例变量。但是生成的实例变量是私有的,子类不能访问!

2 @property = ivar + getter +setter (ivar = 实例变量=成员变量)

@synthesize 作用:自动生成setter方法 和 getter方法

如果使用了属性的话,那么编译器就会自动编写访问属性所需的方法,此过程叫做自动合成(auto synthesis),这个过程由编译器在编译期执行,所以编辑器里看不到这些“合成方法”的源代码

3 @synthesize 还有一个重要作用,可以指定与属性对应的实例变量

例如 @synthsize name = XXX; 那么 self.name 其实操作的实例变量就是 XXX,而不是    _name.但是一般习惯写成 @synthesize name = _name;

4 什么情况不会 auto synthesis

  *同时重写了 setter 和 getter时

  *重写了只读属性的 getter 时

  *使用了 @dynamic时

  *在 @protocol 中定义的所有属性

  *在 category 中定义的所有属性

  *重载的属性

以上情况需要手动创建 ivar

5 @synthesize 和 @dynamic 分别有什么作用

  @property 有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic 都没写,那么默认的就是 @synthesize var = _var;

  @synthesize 的语义是如果你没有手动实现 setter 和 getter 方法,那么编译器会自动为你加上这两个方法

  @dynamic 告诉编译器:属性的setter 与 getter方法由用户自己实现,不自动生成

6 属性的特性

OC 属性的更多相关文章

  1. runtime使用小例子 - 给对象O-C属性赋值

    这些日子在家里学习runtime,看runtime的一些方法和前辈们的博客,我也尝试着写几个runtime有效的运用 一.给对象属性赋值,例如一个WebEntity类 她有三个属性:NSString. ...

  2. iOS学习12之OC属性和点语法

    1.属性(@property和@Synthesize) 1> 属性是 Objective-C 2.0 定义的语法,提供 setter 和 getter 方法的默认实现.在一定程度上简化代码,并且 ...

  3. 理解OC“属性”这一概念

    1.定义一个属性,编译器会自动编写相关的存取方法和实例变量,如果不想使用系统默认的实例变量,可以使用@synthesize(合成)语法来指实例变量的名字,如果不想编译器自动合成存取方法,则可以自己实现 ...

  4. OC 属性关键字

    // 属性关键字 /* 1.ARC下(自动管理内存,自动引用计数)(IOS) strong,weak ----------------------------------------- 2.MRC下( ...

  5. iOS 面试题:OC标题的基本概念<延续>

    第一,如何确定一个方法方法名称 删除减号,加,删除返回值,删除参数类型,删除参数,剩下的就是的方法名 秒,id,能够用assign,copy,retain,依据须要使用 第三,autorelease ...

  6. OC和JS的交互---JavaScriptCore

    JavaScriptCore的简单介绍 JavaScriptCore是iOS7提供的原生框架,可以让Objective-C和JavaScript提供简单直接的交互. JavaScriptCore的使用 ...

  7. OC简单介绍

    一.OC与C的对比 关键字 OC新增的关键字在使用时,注意部分关键字以"@"开头 方法->函数 定义与实现 数据类型 新增:BOOL/NSObject/id/SEL/bloc ...

  8. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  9. iOS Developer Libray (中文版)-- Defining Classes 定义类

    该篇是我自己学习iOS开发时阅读文档时随手记下的翻译,有些地方不是很准确,但是意思还是对的,毕竟我英语也不是很好,很多句子无法做到准确的字词翻译,大家可以当做参考,有错误欢迎指出,以后我会尽力翻译的更 ...

随机推荐

  1. 继续Kanzi

    转眼间,Kanzi已经发展到3.3版本了,之前研究过的东西,今天有空下了个版本跟进更新看看有没有什么变化.新的引擎跟以前2.x版本有很大的差别.新引擎增加了很多新功能(包括局部刷新技术),也跟随大潮加 ...

  2. VB6中的引用传递 与 VB.NET中的引用传递的区别

    首先注意一点,在VB6中缺省参数传递的方式是:引用传递,而在VB.NET中缺省参数传递的方式是:值传递. 然后我们看下面VB6中的引用传递与VB.NET中的引用传递的对比. VB6中的引用传递 Pri ...

  3. WinForm关闭窗体彻底的退出方式

    //System.Environment.Exit(0); //Process.GetCurrentProcess().Kill(); //System.Threading.Thread.Curren ...

  4. tomcat配置项目的图片路径不在项目下的处理

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWA ...

  5. HTML5 十大新特性(一)——语义标签

    说语义标签前先来理解下什么叫语义化,当下html是靠div+css来铸造页面的整体框架和结构的,通篇大量的div可读性极低,因此诞生了这些特殊的标签,简单地说就是见名知义,使页面更清晰,方便维护和开发 ...

  6. Unity NGUI 2D场景添加按钮

    比如说先添加一个sprite 在sprite加上NGUI的 UI Button 然后重点来了  加上Box Collider 2D(重点:2D 千万不要加 Box Collider) 将Box Col ...

  7. 解决本机安装多版本jdk导致The type java.lang.Object cannot be resolved It is indirectly referenced ...

    本机开始安装了jdk1.6,然后安装了jdk1.8 当在调自动化的时候,发现传入函数传参String类型,报错The type java.lang.Object cannot be resolved ...

  8. Java过滤器,SpringMVC拦截器之间的一顺序点关系

    由于最近做的项目中有一部分是接口远程调用,用到了接入权限和业务权限的鉴定,需要采用SpringMVC的拦截器,以前用Struts2的时候用过拦截器,而SpringMVC的拦截器功能之前没研究过,所以这 ...

  9. 第三节 构造一个简单的Linux系统MenuOS——20135203齐岳

    第三节 构造一个简单的Linux系统MenuOS By 20135203齐岳 Linux内核源代码 arch/ 支持不同cpu的源代码 Documentations/ 文档存储 init/ 内核启动相 ...

  10. HDU 1231:最大连续子序列 解题报告

    第一次写博客, 自己总结写出了一道题感觉值得保存. 自己总结的规律:求最大连续子序列, 可以先求包括第N项在内的前N项最大值, (因为每一项都求过后, 前N项最大值最大的那一个元素所连续的序列即为最大 ...