Objective-C之成魔之路【8-訪问成员变量和属性】
郝萌主倾心贡献,尊重作者的劳动成果。请勿转载。
假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源代码下载:点我传送
成员变量的訪问, 是通过读取方法(getter) 和设定方法(setter)。
訪问成员属性:
能够使用点运算符.。或发送消息[]
以上一节中的音乐类为样例:
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
- (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
假设不考虑封装的问题。 单从技术上讲Objective-C, 能够直接通过对象訪问成员变量的。
mySong->title。 也能够取得title成员变量的内容。
须要指出的是。也能够对自己定义的方法使用点运算符,不不过使用在synthesize上(即属性)。
注意:
点运算符和发消息都是能够的,可是,点运算符通常使用在属性上,用于设置或取得实例变量的值。
方法在Apple的文档中被标记为任务(Task),任务通常不是由点运算符运行的,
而是使用传统的方括号形式的消息表达式作为首选的语法。
另外。使用合成(synthesize)的存取方法。属性名称的前面不要以new、alloc、copy和init这些此开头。
这与编译器的一些假定有关,由于编译器会合成对应的方法。
详细过程例如以下:
1)在接口部分中使用@property指令标识属性。
@interface Fraction : NSObject
@property int numerator, denominator;
@end
2)在实现部分使用@synthesize指令就可以。
@inplementation Fraction
@synthesize numerator, denominator;
@end
再次实现头文件例如以下:
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
这里的“參数” 主要分为3大类:
•读写属性(readwrite/readonly) ;
•内存管理(assign/retain/copy) , 这些内存管理的參数。 我们将在内存管理小节部分介绍;
•原子性atomicity(nonatomic) , 是关系线程线程安全的,
假设使用了@property指令,就不须要在实现部分声明对应的实例变量。
通常。假设有称为x的属性,那么在实现部分包含下面行会导致编译器自己主动实现一个取值方法x和一个设置方法setX:
@synthesize x;
由于生成的存取方法是高效的。而且在使用多个核心的多台机器上。使用多线程时也可正常执行。
(这里的说法呢,就是说线程安全的)
@synthesize title;
@synthesize artist;
@synthesize duration;
- (void)start {
//開始播放
}
- (void)stop {
//停止播放
}
- (void)seek:(long int)time {
//跳过时间
}
@end
Objective-C之成魔之路【8-訪问成员变量和属性】的更多相关文章
- Objective-C之成魔之路【0-序章】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 C语言首创 ...
- 刨根问底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 ...
- Objective-C之成魔之路【5-选择结构】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 Objec ...
- 《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖
1. 简介 fixture是pytest的一个闪光点,pytest要精通怎么能不学习fixture呢?跟着我一起深入学习fixture吧.其实unittest和nose都支持fixture,但是pyt ...
- Objective-C之成魔之路【16-使用文件】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 语言的设计 ...
- Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 构造方法 ...
- Objective-C之成魔之路【13-预处理程序】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 预处理提供 ...
- Objective-C之成魔之路【19-归档】
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 在Obje ...
- Objective-C之成魔之路【10-继承性】
郝萌主倾心贡献.尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 继承性是面 ...
随机推荐
- STL中unique的使用
作用 unique函数可以删除有序数组中的重复元素,即去重(并不是真正的删除,后面会讲) 定义在头文件<algorithm>中 函数原型 1.只有两个参数,且参数类型都是迭代器: iter ...
- vs code 用户代码片段 html.json
{ // Place your snippets for html here. Each snippet is defined under a snippet name and has a p ...
- CAD使用DeleteXData删除数据(com接口)
主要用到函数说明: MxDrawEntity::DeleteXData 删除扩展数据,详细说明如下: 参数 说明 pzsAppName 删除的扩展数据名称,如果为空,删除所有扩展数据 c#代码实现如下 ...
- MySQL操作数据库和表的基本语句(DDL)
1.创建数据库: CREATE DATABASE 数据库名; eg.CREATE DATABASE test_ddl;2.创建表 CREATE TABLE 表名(列名 数据类型 约束,...); eg ...
- android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据
public class SlideShowAdView extends FrameLayout { //轮播图图片数量 private static int IMAGE_COUNT = 3; ...
- DataRow复制一行到另一个DataTable
DataRow复制一行到另一个DataTable 下面两个方法是DataRow复制一行到另一个DataTable的,直接Add会出错“此行已属于另一个表”,其实以前就知道怎么做的,可每次要用到的时 ...
- vue mixins应用场景
学习知识得在应用场景中去应用,这样才能真正学到东西,记忆也深刻,以后碰到类似的东西就会了. 1.在assets文件夹下创建一个js文件 // 创建一个需要混入的对象 export const mixi ...
- [Algorithm] 1. A+B Problem
Description Write a function that add two numbers A and B. Clarification Are a and b both 32-bit int ...
- wampsever修改数据库密码
①进入localhost中的mysql数据库 ②再进入mysql数据库中的user表 ③将user表中的三个root账号的密码全部改为你想要的密码(不需要经过MD5加密) ④保存后重新启动服务 如果在 ...
- Buffer.alloc()
Buffer.alloc(size[, fill[, encoding]]) Node.js FS模块方法速查 size {Number} fill {Value} 默认:undefined enco ...