[学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性
11.1 使用属性值
@property float rainHandling;
//表明此类具有float类型的属性,其名称为rainHandling
注意:属性的名称不必与实例变量名称同样。
@synthesize rainHandling;
//表示创建了该属性的訪问代码
注意:使用属性后,能够不声明实例变量。编译器会声明。
有两个地方能够加入实例变量声明:
- 头文件:让子类直接通过属性訪问变量
- 实现文件:变量仅仅属于当前类
点表达式:
- 点表达式出如今(=)的左边:setter方法
- 点表达式出如今(=)的右边:getter方法
注意:假设訪问属性提示訪问的对象不是struct类型,请检查当前类是否已包括了所需的必备头文件
11.2 属性扩展
属性同样适用于int,char。BOOL,struct类型,也能够定义一个NSRect对象的属性
保留死循环(retain cycle):Car对象拥有engine对象,可是engine对象不能反过来拥有Car对象。
copy特性
- name存取方法:
- (void)setName: (NSString *)newName {
[name release];
name = [newName copy];
} // setName
- (NSString *)name {
return (name);
} // name
等同于:
//name属性是copy特性
@property (copy) NSString *name;
@synthesize name;
retain特性:
- engine 的存取方法:
- (void) setEngine: (Engine *) newEngine{
[newEngine retain];
[engine release];
engine = newEngine;
} // setEngine
- (Engine *) engine{
return (engine);
} // engine
等同于:
//engine属性使用的是保留和释放特性
@property (retain) Engine *engine;
@synthesize engine;
noatomic特性:iOS程序常常使用的技术。资源有限的设备上获得更好的性能。
假设自定义了存取方法。那么必须使用nonatomic特性。
默认特性:假设没有为属性指定不论什么特性,它们会默认使用nonatomic和assign特性。
11.21 名称的使用
属性的名称一般与支持属性的实例变量名称同样。
有时程序猿希望实例变量是一个名称,而公开的属性是还有一个名称。
@property(copy)NSString *name;
@synthesize name = appellation;
// 编译器将创建-setName:和-name方法,但在实现代码中用的是appellation实例变量。
注意:
直接訪问实例变量:self.name
使用訪问方法进行赋值:[self setName:@"Car"];
11.22 仅仅读属性
对于仅仅能读取,无法更改的值:
@property(readonly)float shoeSize;
注意:仅仅生成一个getter方法而不会生成setter方法
11.23 自己动手
@dynamic告诉编译器不要生成不论什么代码或创建对应的实例变量。
改变方法名:
使用getter=和setter=特性就能够自定义想要的方法名称
@property (getter=isHidden) BOOL hidden;
//告诉编译器生成名为isHidden的getter方法,并生成名为默认setHidden:的setter方法
注意:属性仅仅支持替代-setBlah和-blah方法,但不支持那些须要接收额外參数的方法
[学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性的更多相关文章
- 笔记-Python基础教程(第二版)第一章
第一章 快速改造:基础知识 01:整除.乘方 (Python3.0之前 如2.7版本) >>> 1/2 ==>0 1/2整除,普通除法: 解决办法1: 1.0/2.0 ==& ...
- 《python基础教程(第二版)》学习笔记 文件和素材(第11章)
<python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...
- 《python基础教程(第二版)》学习笔记 类和对象(第7章)
<python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person: def setName(self,name): self.name=n ...
- 《python基础教程(第二版)》学习笔记 函数(第6章)
<python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params): block return values 记录函数:def f ...
- 《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)
<python基础教程(第二版)>学习笔记 语句/循环/条件(第5章) print 'AB', 123 ==> AB 123 # 插入了一个空格print 'AB', 'CD' == ...
- 《python基础教程(第二版)》学习笔记 字典(第4章)
<python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...
- 《python基础教程(第二版)》学习笔记 字符串(第3章)
<python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符 ...
- 《python基础教程(第二版)》学习笔记 列表/元组(第2章)
<python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...
- 《python基础教程(第二版)》学习笔记 基础部分(第1章)
<python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
随机推荐
- 鸟哥的Linux私房菜笔记第六章(一)
目录与路径 相对路径与绝对路径 上一章简单的提到绝对路径和相对路径 绝对路径:路径的写法一定是由根目录(/)写起的,例如:/home/user 这个目录 相对路径:路径的写法不是由根目录(/)写起,例 ...
- 洛谷P2181 对角线(组合数)
题目描述 对于一个N个定点的凸多边形,他的任何三条对角线都不会交于一点.请求楚图形中对角线交点的个数. 例如,6边形: 输入输出格式 输入格式: 第一行一个n,代表边数. 输出格式: 第一行输出交点数 ...
- 如何使用fetch
Fetch API 提供了一个 JavaScript接口,用于访问和操纵HTTP管道的部分,例如请求和响应.它还提供了一个全局fetch()方法,该方法提供了一种简单,合乎逻辑的方式来跨网络异步获取 ...
- Java 开源博客 Solo 1.1.0 发布 - 告别 GAE
Solo 1.1.0 正式发布了,感谢一直以来关注 B3log 开源的朋友! 在这个版本中,我们对项目结构和发布包进行了重大调整: 各式***尚未普及,所以决定去除 GAE 版本 H2 版本使用人数较 ...
- (转载)Android 方法数超过64k、编译OOM、编译过慢解决方案。
Android 方法数超过64k.编译OOM.编译过慢解决方案. 目前将项目中的leancloud的即时通讯改为环信的即时通讯.当引入easeui的时候 出现方法数超过上限的问题. 搜索一下问题, ...
- 【Oracle】创建角色
任务:创建角色 1)创建角色sse_role,授予create session 权限 2)创建角色tblo_role,授予CREATE PROCEDURE, CREATE SEQUENCE, CREA ...
- 使用Storm实现实时大数据分析!
随着数据体积的越来越大,实时处理成为了许多机构需要面对的首要挑战.Shruthi Kumar和Siddharth Patankar在Dr.Dobb's上结合了汽车超速监视,为我们演示了使用Storm进 ...
- chrome模拟微信
这里有一个模拟器,既可以设置模拟很多型号的手机设备,也可以伪造你想要的HTTP_USER_AGENT.选择USER_AGENT,选other,微信的HTTP_USER_AGENT是: 在iPhone下 ...
- MVC 先后顺序
@foreach (var item in Model) { if (ViewBag.GetModel.ParentID == item.DictID) { <option value=&quo ...
- 【转】ROI Pooling
Faster rcnn的整体构架: 训练的大致过程: 1.图片先缩放到MxN的尺寸,之后进入vgg16后得到(W/16,H/16)大小的feature map: 2.对于得到的大小为(W/16,H/1 ...