@property和@synthesize的特性

时间:2022-03-29 03:44:13

基础回顾:get方法和set方法

定义类成员变量时,可以在@interface中定义,也可以在@implementation中定义:

在@interface中声明,成员变量的状态是受保护的,即“@protected”;

在@implementation中声明,成员变量的状态是私有的,即“@private”

在类的外面,是无法直接访问成员变量的,只有将成员变量修改为@public时,才可以外部访问。

使用@public时,访问成员变量使用“->”,如:

time->hour=;

但使用@public是有风险的(如上面代码中将hour设置为25,实际只有24小时),所以一般访问成员变量都使用get和set方法;

get方法的声明:

-(int)hour;    //get方法,命名规则:返回类型即成员变量的类型,方法名是成员变量名

set方法的声明:

-(void)setHour:(int)newHour    //set方法,命名规则:返回类型是void,方法名是set+成员变量名字的首字母大写,带一个参数,参数类型位成员变量的类型

get方法的实现:

-(int)hour
{
return hour;
}

set方法的实现:

-(void)setHour:(int)newHour
{
if(newHour>||newHour<) //对不合理的值进行过滤
{
hour=;
}
hour=newHour;
}

使用get方法和set方法之后,就可以使用“.”语法访问成员变量:

time.h=;

“.”语法可以自动调用get方法和set方法,当给成员变量赋值时,自动调用set方法;当获得成员变量时,自动调用get方法;

time.h=;    //自动调用set方法赋值
xiaoShi=time.h //自动调用get方法获得time.h的值

在Objective-C中,提供了两个语句,可以自动生成get和set方法:

@property:只能用在@interface中,为成员变量自动生成相应的get和set方法声明

@synthesize:只能用在@implementation中,为成员变量自动生成相应的get和set方法实现

例如:

@property int hour;

@synthesize hour;

进阶:@property和@synthesize的特性

1.使用@property和@synthesize后,仍然可以使用setHour:来访问成员变量:

Time *tm=[Time new];
[tm setHour:];

2.使用@property和@synthsize后,虽然自动生成了get和set方法,仍然可以自己重新定义set和get方法,重新定义的方法会覆盖掉自动生成的方法,OC的这个特性为过滤数据和设置某些规则提供了方便。

3.当只使用@property自动生成get和set方法时,@property会自动生成一个名为“_名称”的成员变量:

@property int hour;  //自动生成成员变量"_hour"

这时@property自动进行了3个操作:

  1)生成一个名为“_hour”的成员变量(4.6版本以后的Xcode)

  2)为“_hour”生成相应的get和set方法的声明

  3)位“_hour”生成相应的get和set方法的实现

所以,使用@propery后,就可以省略掉“{}”中的成员变量声明,因为它已经自动生成了。

4.@synthesize hour,会寻找实例变量”hour”,如果没有找到,则自动生成一个”hour”成员变量

使用:@synthesize hour=_hour,就可以使“hour”和”_hour”联系起来了,并不再生成“hour”成员变量

5.在set和get方法中,不允许使用“self.”,因为“self.”调用的就是方法本身,会形成死循环。

  • 成员变量如果不需要外部访问,则还是按以前的方式用大括号

   

@property和@synthesize的特性的更多相关文章

  1. ios中点语法、property跟synthesize用法

    一:OC中得点语法 1> 点语法的基本使用: ·使用 对象.成员变量   可以实现设置成员变量值,和获取成员变量的值   2> 点语法的本质 (点语法是Xcode编译器自己帮我们完成的一个 ...

  2. Objective-C 点语法 成员变量的作用域 &commat;property和&commat;synthesize关键字 id类型

    点语法 1.利用点语法替换set方法和get方法 方法调用 Student *stu = [Student new]; [stu setAge : 18]; int age = [stu age]; ...

  3. OC开发系列-&commat;property和&commat;synthesize

    property和synthesize 创建一个Person类.提供成员属性的_age和_height的setter和getter方法. #import <Foundation/Foundati ...

  4. Objective-C中的&commat;property和&commat;synthesize用法

    @代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...

  5. iOS 详细解释&commat;property和&commat;synthesize关键字

    /** 注意:由@property声明的属性 在类方法中通过下划线是获取不到的 必须是通过 对象名.属性 才能获取到!- @property和@synthesize关键字是针对成员变量以及get/se ...

  6. OC中两个关键字的作用:&commat;property和&commat;synthesize

    两个关键字的使用:@property和@synthesize 一.@property关键字这个关键字是OC中能够快速的定义一个属性的方式,而且他可以设置一些值,就可以达到一定的效果,比如引用计数的问题 ...

  7. OC语法5——&commat;property和&commat;synthesize

    @property和@synthesize: 我们回想一下: 在OC中我们定义一个Student类需要两个文件Student.h 和 Student.m. Student.h(声明文件):定义成员变量 ...

  8. Objective-C基础笔记(2)&commat;property和&commat;synthesize

    先贴出使用@property和@synthesize实现的上一篇中的代码,再解释这两个keyword的使用方法和含义,代码例如以下: Person.h文件 #import <Foundation ...

  9. Objective-c &commat;property和&commat;Synthesize

    在Objective-c中,使用@property来标识属性(一般是实例变量).在实现文件中使用@synthesize标识所声明的变量,让系统自动生成设置方法和获取方法. 也就是说@property和 ...

随机推荐

  1. 理解 angular2 基础概念和结构 ----angular2系列(二&rpar;

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  2. 利用GCC编译器生成动态链接库和静态链接库

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...

  3. mysql复制表

    create table 表名 like 要复制的表名  //复制表结构 insert into 表名 select * from 要复制的表名  //复制数据 方法2,一般不推荐,如果后台加数据,可 ...

  4. &num;DP&num; ----- OpenJudge最大子矩阵

    OpenJudge 1768:最大子矩阵 总时间限制: 1000ms   内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...

  5. VNCServer,SSH Secure Shell Client&comma;window远程控制linux

    1.VNC远程连接linux图形化桌面 2.SSH Secure Shell Client连接linux终端 3.设置FTP与linux传输文件 1.VNC远程连接linux图形化桌面 在centos ...

  6. sublime3添加python编译系统

    好记性不如烂笔头 为sublime3添加python编译系统,这里使用的anonconda2中的python.exe(即python2.7版本) 步骤: (1)打开sublime,打开“工具-> ...

  7. solusvm安装过程

    openvz solusvm ** Testing connectivity PING solusvm.com (69.168.233.94) 56(84) bytes of data. 64 byt ...

  8. 流媒体技术学习笔记之(十)HLS协议直播延时优化&lpar;35s到10S&rpar;

    1.首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方. HTTP Live Streaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的 ...

  9. 2&period; DNN神经网络的反向更新(BP)

    1. DNN神经网络的前向传播(FeedForward) 2. DNN神经网络的反向更新(BP) 3. DNN神经网络的正则化 1. 前言 DNN前向传播介绍了DNN的网络是如何的从前向后的把数据传递 ...

  10. Linux 下的profile

    # /etc/profile # System wide environment and startup programs, for login setup# Functions and aliase ...