objectcproperty括号内属性讲解

objectcproperty括号内属性讲解

ID:8813531

大小:24.09 KB

页数:11页

时间:2018-04-08

objectcproperty括号内属性讲解_第1页
objectcproperty括号内属性讲解_第2页
objectcproperty括号内属性讲解_第3页
objectcproperty括号内属性讲解_第4页
objectcproperty括号内属性讲解_第5页
资源描述:

《objectcproperty括号内属性讲解》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、一、前言一个object的属性允许其他object监督和改变他的状态。但是在一个设计良好的面向对象程序中,直接访问一个object的内部状态是不可能的。相反,存取器(gettersetter)方法是一个抽象相互作用object的底层数据。通过访问器方法与属性进行交互@property指令的目标是通过自动的创建这些存取器方法使创建和配置属性变得更加简单。它允许你在语义级别上指定公有属性的行为。而且它比较关注你的详细实现。这个模型调查各种各样的属性,这些属性可以让你修改getter和setter行为。其中的一些属性确定是如何处理内存的,所以这个模型也服务于在Objec

2、tive-C中对内存管理的实际的介绍。二、@property指令首先,让我们看一下当我们直接使用@property时发生了什么事情,考虑一下下面的程序,一个Car类和它的实现。Car.h#import@interfaceCar:NSObject@propertyBOOLrunning;@endCar.m#import"Car.h"@implementationCar@synthesizerunning=_running;//Xcode4.4以上可选@end编译器会为running属性创建一个getter和sette

3、r方法。默认的命名习惯是用属性自己作为getter,加上前缀set作为setter方法,并且在前面加下划线作为实例变量,就像下面这样:-(BOOL)running{return_running;}-(void)setRunning:(BOOL)running{_running=running;}当用@property直接生成属性,你可以直接调用这些方法,就像这些方法就是包含在该类的interface和实现文件中。你也可以在.m中重写他们,但是这样会使得@synthesize指令强制。然而,你应该很少需要传统的存取器尽管@property属性供这样做在抽象的级别。属

4、性访问可以是用类实例后加.访问。所以看下面的代码:Car*honda=[[Caralloc]init];honda.running=YES;NSLog(@"%d",honda.running);当执行honda.running时,也就是调用setRunning:方法。当给他分配值并且运行时,就是调用getter方法。为了改变这种存取器方式,我们可以在@properry后加括号指定,下面就是介绍可用的属性。1、Thegetter=andsetter=Attributes如果我们不喜欢@property默认的命名方式,我们可以通过Thegetter=andsetter

5、=Attributes来改变存取器方法名。最常用的就是对Boolean属性使用这个。可以把getter把惯例的改成is,例如:@property(getter=isRunning)BOOLrunning;现在生成存储器叫做isRunning和setRunning.而标注公共性质还是叫做running。下面是我们应该怎么用逗号使用它。Car*honda=[[Caralloc]init];honda.running=YES;NSLog(@"%d",honda.running);NSLog(@"%d",[hondaisRunning]);这些是唯一的属性,他们都是boo

6、lean标记。2、readonly属性readonly属性是一个很方便的方法让你的属性只读。这样会省略setter方法,并且防止作恶通过.调用,但是getter不受影响。例如,我们修改running的属性为readonly,注:我们可以制定多个属性,然后用“,”分开:#import@interfaceCar:NSObject@property(getter=isRunning,readonly)BOOLrunning;-(void)startEngine;-(void)stopEngine;@end不是让其他obj

7、ect改变running的属性,我们将会设置两个方法去访问。这两个方法的而实现如下:-(void)startEngine{_running=YES;}-(void)stopEngine{_running=NO;}要记得,@property还为我们生成了一个实例变量,这就是我们为什么可以访问_running在没有声明的条件下(我们也可以直接使用self.running因为这个属性是只读的)。让我们来运行下列代码测试:Car*honda=[[Caralloc]init];//honda.running=YES;NSLog(@"%d",honda.running);ho

8、nda.r

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。