码迷,mamicode.com
首页 > 其他好文 > 详细

[学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性

时间:2015-07-31 06:40:30      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:ios   objective-c   ios开发   

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版》第十一章 属性

标签:ios   objective-c   ios开发   

原文地址:http://blog.csdn.net/apple890111/article/details/47162283

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!