oc基础知识:属性、协议和分类
2013-11-27 20:54
183 查看
2013年11月27日日志:
1.属性:
@property(assign
,copy或retain内存管理的信息)类型
实例变量名
@synthesize
实例变量名
属性方法实现了实例变量的get和set方法,等同于:
-(void)set实例变量名:(参数类型)参数名{
实例变量名
=
参数名;
}和
-(返回值类型)实例变量名{
return
实例变量名;
}
需要注意的是属性方法不能实现那些需要接受额外参数的方法,例如car对象中轮胎的状况:
-(void)setTire:(Tire*)tire
atIndex:(int)index;
-(Tire*)tireAtIndex:(int)index;
从而说明特性不是万能的,它只支持替代-setBlah和-blah方法。属性可以减少我们所写代码的数量。使用属性方法后就可以使用点语法了,点语法只是调用实例的set和get方法的一种快捷方式。
dealie.blah=greeble;等同于[dealie setBlah:greeble];
shronk = dealie.greeble;等同于shronk = [dealie greeble];
2.协议:
声明协议:
@protocol
协议名称
@optional
方法声明列表
@required
方法声明列表
@ end
协议的所有使用者都要实现协议中的方法,其中@optional可选择实现,@required声明协议中必须实现的方法,如果不加声明的情况下默认为@required,即方法必须实现。要注意的是协议的使用不引入新的实例变量。
协议也具有动态绑定特性,比如下面的实例对象被确定为gun,就拥有了gun所拥有的所有属性:
Arm *arm = [[Arm alloc]init];//动态绑定的实现
arm.name =
@"wuqi";
NSLog(@"%@的编号为 %d\n",arm.name,arm.number);
//wuqi的编号为 4
arm = gun;
NSLog(@"%@的编号为 %d\n",arm.name,arm.number);
//ak47的编号为 1
//(动态绑定)实例对象被确定为gun,就拥有了gun所拥有的所有属性,
[arm movToX:70 ToY:70];
//ak47正在移动到70,70
[arm fireToX:80 ToY:80];
//ak47正在开火到80,80
[arm play];
//ak47正在播放抢的声音!
实例对象被确定为gun,就拥有了gun所拥有的所有属性,名字和编号都变成gun的名字和编号,调用的是gun内实现的方法。
3.分类:category
@interface
需要添加方法的类名(分类名)
方法声明列表
@end
@implementation
需要添加方法的类名(分类名)
方法的具体实现
@end
用于给类添加新的方法;分类只能添加新的方法,而不能添加新的实例变量,如果想要添加新的实例变量,可以使用创建新的子类来添加新的变量。分类可以重载该类中的方法,但大家一般不经常这样使用。
分类中声明的所有方法,这是和协议很不相同的一个地方。分类使用需谨慎,因为使用分类不仅会影响类本身,还会影响到它的所有子类。
1.属性:
@property(assign
,copy或retain内存管理的信息)类型
实例变量名
@synthesize
实例变量名
属性方法实现了实例变量的get和set方法,等同于:
-(void)set实例变量名:(参数类型)参数名{
实例变量名
=
参数名;
}和
-(返回值类型)实例变量名{
return
实例变量名;
}
需要注意的是属性方法不能实现那些需要接受额外参数的方法,例如car对象中轮胎的状况:
-(void)setTire:(Tire*)tire
atIndex:(int)index;
-(Tire*)tireAtIndex:(int)index;
从而说明特性不是万能的,它只支持替代-setBlah和-blah方法。属性可以减少我们所写代码的数量。使用属性方法后就可以使用点语法了,点语法只是调用实例的set和get方法的一种快捷方式。
dealie.blah=greeble;等同于[dealie setBlah:greeble];
shronk = dealie.greeble;等同于shronk = [dealie greeble];
2.协议:
声明协议:
@protocol
协议名称
@optional
方法声明列表
@required
方法声明列表
@ end
协议的所有使用者都要实现协议中的方法,其中@optional可选择实现,@required声明协议中必须实现的方法,如果不加声明的情况下默认为@required,即方法必须实现。要注意的是协议的使用不引入新的实例变量。
协议也具有动态绑定特性,比如下面的实例对象被确定为gun,就拥有了gun所拥有的所有属性:
Arm *arm = [[Arm alloc]init];//动态绑定的实现
arm.name =
@"wuqi";
NSLog(@"%@的编号为 %d\n",arm.name,arm.number);
//wuqi的编号为 4
arm = gun;
NSLog(@"%@的编号为 %d\n",arm.name,arm.number);
//ak47的编号为 1
//(动态绑定)实例对象被确定为gun,就拥有了gun所拥有的所有属性,
[arm movToX:70 ToY:70];
//ak47正在移动到70,70
[arm fireToX:80 ToY:80];
//ak47正在开火到80,80
[arm play];
//ak47正在播放抢的声音!
实例对象被确定为gun,就拥有了gun所拥有的所有属性,名字和编号都变成gun的名字和编号,调用的是gun内实现的方法。
3.分类:category
@interface
需要添加方法的类名(分类名)
方法声明列表
@end
@implementation
需要添加方法的类名(分类名)
方法的具体实现
@end
用于给类添加新的方法;分类只能添加新的方法,而不能添加新的实例变量,如果想要添加新的实例变量,可以使用创建新的子类来添加新的变量。分类可以重载该类中的方法,但大家一般不经常这样使用。
分类中声明的所有方法,这是和协议很不相同的一个地方。分类使用需谨慎,因为使用分类不仅会影响类本身,还会影响到它的所有子类。
相关文章推荐
- OC基础8:分类和协议
- oc基础知识3:存取方法、静态变量、协议
- 四、oc中分类的基础知识学习
- OC基础:属性.点语法.KVC 分类: ios学习 OC 2015-06-24 17:24 61人阅读 评论(0) 收藏
- OC基础知识 -- 属性
- 黑马程序员——ios开发基础之OC中的分类、协议、延展和代理
- 黑马程序员——OC基础---分类(Category)、非正式协议及分类延展
- 黑马程序员---OC基础---Block、分类Category、协议protocol
- OC基础--分类(category) 和 协议(protocol)
- oc中的分类/协议/属性
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
- (九)黑马程序员——oc基础之分类与协议
- OC基础8:分类和协议
- 黑马程序员——OC基础学习(二)---对象方法和类方法的学习知识总结
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
- 人工智能的基础--知识分类
- OC学习Runtime之协议与分类
- OC基础知识点
- OC属性、构造函数的基本知识
- oc基础知识