先前我们学的实例变量是这样的

 {
int _age;
int _height;
int age;
}

后来学属性

 @property int age;

看到@property 会自动编译生成某个成员变量的setter方法和getter方法的声明

 - (void)setAge:(int) age;
- (int)age;

举例:

@property int _age;

就会编译生成

- (void)set_age:(int) age;

- (int)_age;

也就是说你怎么写实例变量就会怎么编译生成,为了生成标准的实例变量的setter方法和getter方法的声明,所以属性不要再加 _ 了,并且setAge大写

既然使用@property有了实例变量的setter方法和getter方法的声明,那么实现就是@synthesize property

 // 后面要求写属性,明确要对哪个属性实现一下setter、getter方法
@synthesize age

看到@synthesize 会自动编译生成某个成员变量的setter方法和getter方法的实现

 - (void)setAge:(int)age {
_age = age;
} - (int)age {
return age;
}

如果硬要去访问 _age 那个成员变量,就

@synthesize age = _age;

这样会自动生成age的setter方法和getter方法的实现,并且会去访问_age这个成员变量

注意:左边的age:要实现的是age的setter方法和getter方法

   右边的age:是在实现里去访问_age这个成员变量,所以这样就将属性和实例变量联系在一起了

   系统规定成员变量要加 _ 修饰

上面的@synthesize age;没写后面的成员变量,会默认访问age

此时:会自动访问_age这个成员变量,如果不存在,就会自动生成@private类型的_age实例变量,在延展中声明,是私有的

XCode4.n之后 @property 即生成声明有生成实现

 @property int age;

属性是实例变量_age的一对setter、getter方法的声明和实现

默认情况下,setter、getter方法中的实现会去访问 _ 开头的实例变量

学到这里,就清楚了为什么一开始我们学的时候成员变量以 _ 开头,其实系统内部是这样的

属性(@property)、@synthesize的更多相关文章

  1. Object的属性property详细解释(自动生成成员变量)

    类Class中的属性property: 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: @interfac ...

  2. OC 实例变量(instance var)与属性(@property)的关系 isa指针

    实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和 ...

  3. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  4. iOS知识基础篇--@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain详解

    一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonat ...

  5. iOS runtime探究(三): 从runtime開始理解OC的属性property

    你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要解说runtime相关知识, ...

  6. 属性(property)与成员变量(ivar)

    类内使用成员变量{}, 类外使用属性@property /*********** --- Person.h */ @interface Person : NSObject { NSString *_n ...

  7. 五.OC基础--1.多态,2.类对象,3.点语法,4.@property&@synthesize,5.动态类型,内省(判断对象是否遵循特定的协议,以及是否可以响应特定的消息)

    五.OC基础--1.多态, 1. 多态概念,定义:多态就是某一类事物的多种形态: 表现形式: Animal *ani = [Dog new]; 多态条件:1.有继承关系 2.有方法的重写 2.多态代码 ...

  8. 分析Runtime的属性Property

    一.介绍 在OC中我们可以给任意的一个类以@property的格式声明属性,当然对于这个属性也会采用某一些属性关键字进行修饰,那么属性的真正的面目是啥样子的呢?其实,runtime源码中可以看到,pr ...

  9. 区分元素特性attribute和对象属性property

    × 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...

随机推荐

  1. Mina架构与优化指南

    MINA架构 这里,我借用了一张Trustin Lee在Asia 2006的ppt里面的图片来介绍MINA的架构. Remote Peer就是客户端,而下方的框是MINA的主要结构,各个框之间的箭头代 ...

  2. [New Portal]Windows Azure Virtual Machine (19) 关闭Azure Virtual Machine与VIP Address,Internal IP Address的关系(1)

    <Windows Azure Platform 系列文章目录> 默认情况下,通过Azure Management Portal创建的Public IP和Private IP都是随机分配的. ...

  3. JS魔法堂:函数重载 之 获取变量的数据类型

    Brief 有时我们需要根据入参的数据类型来决定调用哪个函数实现,就是说所谓的函数重载(function overloading).因为JS没有内置函数重载的特性,正好给机会我们思考和实现一套这样的机 ...

  4. JS魔法堂:函数节流(throttle)与函数去抖(debounce)

    一.前言 以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemov ...

  5. 地图定位IOS8.0之前的定位

    在ios8.0之前定位的步骤如下: 1.首先将我们的项目版本切换到7.0

  6. 二、Sink例程

    1. Sink例程 CSR粗略的将audio蓝牙设备分为了两大类:sink和source设备,并分别提供了两类设备的例程,配置工具,说明文档.如对于sink设备,提供了sink app例程,SinkU ...

  7. 在Visual Studio 2015 Preview 中使用Github 版本控制

    打开Visual Studio,新建项目,右下角勾选,如下图: 点击‘OK’后,出现下图窗口,选择'Git' : 如果是现有项目可以在‘文件’菜单下找到‘Add to Source Control’ ...

  8. 关于Html与css的一些解释

    一.简单介绍 1.html,是hyper text markup language的缩写,中文为“超文本标记语言”. 2.html不是编程语言而是一种标记语言. 二.标签与元素 1.html标签:如& ...

  9. Android学习笔记(九) 视图的应用布局效果

    最近少了写博客,可能最近忙吧,工作上忙,因为工作原因也忙于学习,也没记录什么了,也没有按照之前的计划去学习了.现在就记录一下最近学到的. 要做Android应用,界面设计少不了,可惜之前一直在用Win ...

  10. ThinkCMF-如何收藏

    注:收藏对应的表名-cmf_user_favorites <php> $object_id = "1"; </php> <a href="{ ...