[学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性
2017-07-18 18:55
806 查看
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版》第十一章 属性
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第九章 内存管理
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十三章 协议
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十二章 类别
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十章 对象初始化
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第九章 内存管理
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章
- python基础教程_学习笔记11:魔法方法、属性和迭代器
- Objective-C基础教程学习笔记(一)启程
- Objective-C基础教程学习笔记(十五)文件加载与保存
- Objective-C基础教程学习笔记(二)对C的扩展
- Objective-C基础教程学习笔记(六)源文件组织
- Objective-C基础教程学习笔记(七)Xcode快捷健
- Objective-C基础教程学习笔记(五)复合
- Objective-C基础教程学习笔记(八)Foundation Kit快速教程
- Objective-C基础教程学习笔记(附录)从Java转向Objective-C
- Objective-C基础教程(第一版)-学习笔记第八章Foundation Kit快速教程
- Objective-C基础教程学习笔记