郝萌主倾心贡献,尊重作者的劳动成果。请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送


訪问成员变量


从面向对象的封装角度考虑问题, 要想訪问类中的成员变量, 是要通过方法訪问的, 
成员变量前面要有作用域限定符(protected, public, private) , 
这些存取权限修饰符我们将在后面介绍。 


成员变量的訪问, 是通过读取方法(getter) 和设定方法(setter)。

訪问成员属性:

能够使用点运算符.。或发送消息[]


以上一节中的音乐类为样例:

Song.h文件
@interface Song : NSObject {

NSString *title;

NSString *artist;

long int duration;

}

//操作方法

- (void)start;

- (void)stop;

- (void)seek:(long int)time;

//訪问成员变量方法

- (NSString *)title; 

- (void) setTitle:(NSString *) newTitle;

- (NSString *)artist; 

- (void) setArtist:(NSString *) newArtist;

- (long int)duration; 

- (void) setDuration:(long int) newDuration;

@end


Song.m文件
@implementation Song

- (void)start {

//開始播放

}

- (void)stop {

//停止播放

}

- (void)seek:(long int)time {

//跳过时间

}
//訪问成员变量方法

- (NSString *)title {

return title;

}

- (void) setTitle:(NSString *) newTitle {

title = newTitle;

}

- (NSString *)artist {

return artist;

}

- (void) setArtist:(NSString *) newArtist {

artist = newArtist;

}

- (long int)duration {

return duration;

}

- (void) setDuration:(long int) newDuration {

duration = newDuration;

}

@end


小结
採用了封装之后就能够通过存取方法訪问属性, 
比如[mySong title] 是取得title成员变量内容。 

假设不考虑封装的问题。 单从技术上讲Objective-C, 能够直接通过对象訪问成员变量的。 
訪问操作符是“->” 。 
比如:

mySong->title。 也能够取得title成员变量的内容。

须要指出的是。也能够对自己定义的方法使用点运算符,不不过使用在synthesize上(即属性)。

注意:

点运算符和发消息都是能够的,可是,点运算符通常使用在属性上,用于设置或取得实例变量的值。

方法在Apple的文档中被标记为任务(Task),任务通常不是由点运算符运行的,

而是使用传统的方括号形式的消息表达式作为首选的语法。

另外。使用合成(synthesize)的存取方法。属性名称的前面不要以new、alloc、copy和init这些此开头。

这与编译器的一些假定有关,由于编译器会合成对应的方法。

属性
对于成员变量的訪问, 要通过读取方法(getter) 和设定方法(setter) 。 
在实现部分也要实现这些读取方法和设定方法。 
为了简化这些琐碎编码Objective-C2.0提出属性的概念, 
使用 @propertykeyword在接口部分定义属性, 
在实现部分使用 @synthesizekeyword在组装和合成这些属性。


这样的可自己主动生成设值方法和取值方法(统称为存取方法)。

详细过程例如以下:

1)在接口部分中使用@property指令标识属性。

@interface Fraction : NSObject

@property int numerator, denominator;

@end

2)在实现部分使用@synthesize指令就可以。

@inplementation Fraction

@synthesize numerator, denominator;

@end

再次实现头文件例如以下:

@interface Song : NSObject {

NSString *title;

NSString *artist;

long int duration;

}

//操作方法

- (void)start;

- (void)stop;

- (void)seek:(long int)time;

//訪问成员变量方法

@property(copy,readwrite) NSString *title;

@property(nonatomic,retain) NSString *artist;

@property(readonly) long int duration;

@end


代码说明:
声明property的语法为: @property (參数) 类型 名字; , 

这里的“參数” 主要分为3大类: 

•读写属性(readwrite/readonly) ; 

•内存管理(assign/retain/copy) , 这些内存管理的參数。 我们将在内存管理小节部分介绍; 

•原子性atomicity(nonatomic) , 是关系线程线程安全的,
atomicity是原子性的线程安全的, 可是会影响性能。 
假设确定不考虑线程安全问题能够使用 nonatomic。

注意:

假设使用了@property指令,就不须要在实现部分声明对应的实例变量。

通常。假设有称为x的属性,那么在实现部分包含下面行会导致编译器自己主动实现一个取值方法x和一个设置方法setX:

@synthesize x;

由于生成的存取方法是高效的。而且在使用多个核心的多台机器上。使用多线程时也可正常执行。

(这里的说法呢,就是说线程安全的)

实现.m文件例如以下:
@implementation Song

@synthesize title;

@synthesize artist;

@synthesize duration;

- (void)start {

//開始播放

}

- (void)stop {

//停止播放

}

- (void)seek:(long int)time {

//跳过时间

}

@end

Objective-C之成魔之路【8-訪问成员变量和属性】的更多相关文章

  1. Objective-C之成魔之路【0-序章】

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 C语言首创 ...

  2. 刨根问底Objective-C Runtime(4)- 成员变量与属性

    http://chun.tips/blog/2014/11/08/bao-gen-wen-di-objective[nil]c-runtime(4)[nil]-cheng-yuan-bian-lian ...

  3. Objective-C之成魔之路【5-选择结构】

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 Objec ...

  4. 《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖

    1. 简介 fixture是pytest的一个闪光点,pytest要精通怎么能不学习fixture呢?跟着我一起深入学习fixture吧.其实unittest和nose都支持fixture,但是pyt ...

  5. Objective-C之成魔之路【16-使用文件】

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 语言的设计 ...

  6. Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 构造方法 ...

  7. Objective-C之成魔之路【13-预处理程序】

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 预处理提供 ...

  8. Objective-C之成魔之路【19-归档】

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 在Obje ...

  9. Objective-C之成魔之路【10-继承性】

    郝萌主倾心贡献.尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 继承性是面 ...

随机推荐

  1. HP11.31安装11.2.0.3实施手册

    1 前言 此文档详细描述了Oracle 11gR2 数据库在HP11.31上的安装RAC的检查及安装步骤.文档中#表示root用户执行,$表示grid或oracle用户执行. 2 系统环境 操作系统环 ...

  2. 新建 vue项目时报错,无法成功搭建项目

    之前电脑已经安装 Node环境和 vue-cli脚手架,但是过段时间没有使用,然后现在用 vue-cli 搭建项目的时候,启动服务器的时候报错,无法启动成功,摸索半天,发现是因为 Node和vue-c ...

  3. MySQL for Mac 终端操作说明

    mysql for mac 终端操作说明MySQL服务开启Mac版mysql可以从设置里启动服务: 如果想要在终端(Terminal)中操作mysql,需要先添加mysql路径,在此以zsh为例: # ...

  4. CAD参数绘制mcdbsolid对象(com接口)

    C#中实现代码说明: private void DrawSolid() { //绘McDbSolid对象 axMxDrawX1.AddLinetype("MLineType1", ...

  5. CAD参数绘制文字(网页版)

    在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOUBLE dPosX ...

  6. 判断Exe(DLL)和符号文件是否匹配---验证模块和符号文件是否匹配的工具和方法

    当我们进行程序调试时,有时调试器会直接告诉你符号文件不对,或则显示出的调用栈不对,当你怀疑符号文件不匹配时,如何确定呢? 如果是用windbg调试,请用 !chksym 模块名比如,匹配的时候  不匹 ...

  7. vue中滚动页面,改变样式&&导航栏滚动时,样式透明度修改

    vue中滚动页面,改变样式&&导航栏滚动时,样式透明度修改.vue <div class="commonHeader" v-bind:class=" ...

  8. eclipse修改xml文件默认的打开方式为XML Editor

    1.菜单:Window   ->   Preferences   ->   General   ->   Editors   ->   File   Associations  ...

  9. switch、try-catch

    记录 1. 使用对象代替 switch 和 if-else 2. 根据返回数据是否能转成对象,取值 如果返回是数字字符串,直接返回,如果返回是对象,取对应的key值,再返回 其它情况,返回空 {{ o ...

  10. vue mixins应用场景

    学习知识得在应用场景中去应用,这样才能真正学到东西,记忆也深刻,以后碰到类似的东西就会了. 1.在assets文件夹下创建一个js文件 // 创建一个需要混入的对象 export const mixi ...