Objective-C之成魔之路【8-訪问成员变量和属性】

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

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

我要捐赠: 点击捐赠

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

时间: 2024-08-26 09:30:34

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

Objective-C之成魔之路【8-访问成员变量和属性】

重开发者的劳动成果,请勿转载 访问成员变量 从面向对象的封装角度考虑问题, 要想访问类中的成员变量, 是要通过方法访问的, 成员变量前面要有作用域限定符(protected, public, private) , 这些存取权限修饰符我们将在后面介绍. 成员变量的访问, 是通过读取方法(getter) 和设定方法(setter). 访问成员属性: 可以使用点运算符.,或发送消息[] 以上一节中的音乐类为例子: Song.h文件 @interface Song : NSObject { NSStri

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

重开发者的劳动成果,请勿转载 C语言首创于AT&T实验室, UNIX OS的发展促进了C语言的快速普及,UNIX OS几乎完全是由C语言编写的. Brad J.Cox在20世纪80年代早期设计了Objective-C语言,它以一种叫做SmallTalk-80的语言为基础. SmallTalk-80可以参考: http://zh.wikipedia.org/wiki/Smalltalk Objective-C在C语言的基础上加了一层,这意味着对C进行了扩展, 从而创造出一门新的程序设计语言,支持面

Objective-C之成魔之路【15-Foundation框架】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 概述 Mac OS X开发会使用 Cocoa框架, 它是一种支持应用程序提供丰富用户体验的框架, 它实际上由: Foundation和Application Kit(AppKit)和 Core Data框架组成. iOS开发, 会使用 Cocoa Touch框架, 它实际上由: Foundation.Core

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

http://chun.tips/blog/2014/11/08/bao-gen-wen-di-objective[nil]c-runtime(4)[nil]-cheng-yuan-bian-liang-yu-shu-xing/ 上一篇笔记讲述了objc runtime中消息和Category的细节,本篇笔记主要是讲述objc runtime的 成员变量和属性. 习题内容 下面代码会? Compile Error / Runtime Crash / NSLog…? @interface Sark

Objective-C之成魔之路【11-多态性、动态类型和动态绑定】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 多态这个其它语言也有.动态类型有类似的,但不完全相同. 动态绑定别的语言也有类似,但没有objective-c用的这么多. 多态能够使来自不同类的对象定义相同名称的方法. 动态类型能使程序直到执行时才确定对象所属的类. 动态绑定则能使程序直到执行时才确定实际要调用的对象方法. 多态性是指在父类中定义的成员变量和

Objective-C之成魔之路【3-数据类型】

重开发者的劳动成果,请勿转载 数据类型. 运算符和表达式在任何的计算机语言中都比较重要的, 在面向对象的Objective-C语言中, 除了常规的基本类型, 还有对象类型等. 运算符和表达式完全遵守C语言规范. Objective-C数据类型可以分为:基本数据类型. 对象类型和id类型. 基本数据类型有: int. float. double和char类型. 对象类型就是类或协议所声明的指针类型, 例如: NSAutoreleasePool * pool, 其中NSAutoreleasePool

Objective-C之成魔之路【17-内存管理】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 内存管理关心的是清理(回收)不用的内存,以便内存能够再次利用. 提供给Objective-C程序员的基本内存管理模型有以下三种: 1)自动垃圾收集.(iOS运行环境并不支持垃圾收集,在这个平台开发程序时没有这方面的选项,只能用在Mac OS X 程序上开发.这个机制挺恶心的,用mac电脑的人知道,当内存不足的时

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

重开发者的劳动成果,请勿转载 Objective-C中的控制语句有以下几类: ? 分支语句: if-else, switch ? 循环语句: while, do-while, for ? 与程序转移有关的跳转语句: break, continue, goto 对于任何程序语言来说,有能力进行判断是一项基本特性. if-else语句 分支语句提供了一种控制机制, 使得程序的执行可以跳过某些语句不执行, 而转去执行特定的语句. 1. 条件语句 if-else 2. 多分支语句 switch 条件语句

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

郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 语言的设计主要是被应用于实践, 而Objective-C应用最广的地方就是Mac OS X或iOS的Foundation框架. Foundation框架同意你利用文件系统对文件或文件夹运行基本操作,这些基本操作是由NSFileManager类提供的. 使用NSFileHandle类提供的方法,能够打开文件并对