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

 {
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. javascript学习总结(三):如何较好的使用js。

    1 假如浏览器不支持JavaScript怎么办? a.为什么浏览器会不支持?大部分浏览器都有禁用脚本的功能,例如chrome.b.在js被禁用的情况下要保证网页仍能实现它的核心功能(关键的用户需求) ...

  2. Apache Kylin 部署之不完全指南

    1. 引言 Apache Kylin(麒麟)是由eBay开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据.底层存储用的是HBase,数据输入与cu ...

  3. 深入分析MVC中通过IOC实现Controller依赖注入的原理

    这几天利用空闲时间,我将ASP.NET反编译后的源代码并结合园子里几位大侠的写的文章认真的看了一遍,收获颇丰,同时也摘要了一些学习内容,存入了该篇文章:<ASP.NET运行机制图解>,在对 ...

  4. LeetCode - Populating Next Right Pointers in Each Node

    题目: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode ...

  5. 基于<MediaElement>的WPF视频播放器(可拖拽进度条播放)【1】

    一.前言       前两天上峰要求做一个软件使用向导,使用WPF制作.这不,这两天从一张白纸开始学起,做一个播放演示视频的使用向导.以下是粗设计的原型代码: 二.效果图 三.代码 前台代码: < ...

  6. OpenSNS开发笔记(1)

    数据分页: $Data = M('Channel'); // 实例化Data数据模型 $content = $Data->page($page, 4)->select(); $totalC ...

  7. iOS阶段学习第16天笔记(Category-NSSet-SEL-NSIndexSet 操作)

    iOS学习(OC语言)知识点整理 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 ...

  8. FreeBSD应该装gnome3做桌面

    目前freebsd pkg包管理体系的repo源多了一些,速度快了很多. 仓库中目前的版本为3.14,安装gnome3很简单. pkg install xorg gnome3 echo "e ...

  9. python队列Queue

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

  10. oracle/MySQL 中的decode的使用

    MySQL decode()的等同实现      在Oracle中使用decode方法可以轻松实现代码和值之间的转换,但是在MySQL中该如何实现类似功能呢?    MySQL中没有直接的方法可以使用 ...