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版》第十一章 属性的更多相关文章

  1. 笔记-Python基础教程(第二版)第一章

    第一章 快速改造:基础知识 01:整除.乘方 (Python3.0之前 如2.7版本) >>> 1/2 ==>0 1/2整除,普通除法: 解决办法1: 1.0/2.0  ==& ...

  2. 《python基础教程(第二版)》学习笔记 文件和素材(第11章)

    <python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...

  3. 《python基础教程(第二版)》学习笔记 类和对象(第7章)

    <python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person:    def setName(self,name):        self.name=n ...

  4. 《python基础教程(第二版)》学习笔记 函数(第6章)

    <python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params):  block  return values 记录函数:def f ...

  5. 《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)

    <python基础教程(第二版)>学习笔记 语句/循环/条件(第5章) print 'AB', 123 ==> AB 123 # 插入了一个空格print 'AB', 'CD' == ...

  6. 《python基础教程(第二版)》学习笔记 字典(第4章)

    <python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...

  7. 《python基础教程(第二版)》学习笔记 字符串(第3章)

    <python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符 ...

  8. 《python基础教程(第二版)》学习笔记 列表/元组(第2章)

    <python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...

  9. 《python基础教程(第二版)》学习笔记 基础部分(第1章)

    <python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...

  10. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

随机推荐

  1. (转)(C++)关于抽象基类和纯虚函数

    ★抽象类:一个类可以抽象出不同的对象来表达一个抽象的概念和通用的接口,这个类不能实例化(创造)对象. ★纯虚函数(pure virtual):在本类里不能有实现(描述功能),实现需要在子类中实现.例: ...

  2. SQLServer 行转列,统计,二次分组

    create table test (   bizdate datetime, --日期   classes varchar(50), --班次 '白班' 或 '夜班'   qty int --产量 ...

  3. Unity3d gameObject

    using UnityEngine; using System.Collections; public class test : MonoBehaviour { //print只能在MonoBehav ...

  4. RocketMQ之基本信息

    1.Producer 即消息生产者,负责产生消息,一般由业务系统负责产生消息. 2.Consumer 即消息消费者,负责消费消息,一般是后台系统负责异步消费. 3.Push Consumer Cons ...

  5. (转) 50个CSS技巧

    这里我工作中收集了10个很不错的CSS技巧,你可以用在你的项目上.它可以帮你很好地整理你的元素并让他们看起来蛮酷的.下面开始我们的内容,希望你会喜欢它.下面是我收集的CSS技巧,希望能帮助到你,感觉收 ...

  6. 自定义SearchView实现即时查询

    1.效果图,输入关键字时会根据关键字改变而更新数据. 2.其布局文件和2个小图标del.png和searchview.png,布局文件如下:高度已固定为46dp. <?xml version=& ...

  7. 决策实验(2)分水岭&哄骗实验

    转载请注明http://www.cnblogs.com/igoslly/p/6824544.html 史密斯实验II PART I 分水岭实验 两种选项 A 50%没钱,50% 45元 B 获取固定数 ...

  8. go基础笔记

    1.slice:作为参数传递时,传递的是地址,当append时,在新的内存地址分配数据,但是没有返回给原的slice,只能通过返回值的方式赋值给slice2.func(a []int):传递,可以3. ...

  9. Webstorm 破解2017.1 for Mac

    废话不多说,改了去年分享2016版本的文章,给同学们带来2017.1版本的Mac版本.(win版本网上很多,我这里就不贴出来了). 1.去官仿下载最新的版本  https://www.jetbrain ...

  10. Java中 对象的创建于调用

    Main方法是程序的主入口,想要用某个方法必须在main方法中调用 创建对象: 类名 对象名 = new 类名(); 使用对象访问类中的成员: 对象名.成员变量: 对象名.成员方法(); 成员变量的默 ...