OC重新开始(八)属性

属性

属性的概念

一般来说属性指的是一个对象的属性特征。类似于一个篮球把它当做一个对象的话,篮球的价格、大小就是它的属性。而在OC中属性还被赋予了从外部可以访问的对象的属性

属性须知

  1. 能自动生成访问方法
    • 能为制定的实例自动生成getter和setter方法,也能手动
    • 能删除类的接口文件中的访问方法
  2. 自动生成实例变量
    • 能自动生成同名的实例变量
  3. 更简单的调用访问方法
    • 可以通过(.)语法来调用访问方法
  4. 属性的内省
    • 动态的查询类中声明的属性以及属性的名称和类型

属性的声明

属性的声明相当于同时声明了读写两个访问方法。通过@property编译器命令声明,后面接上属性类型和名称。

@interface Basketball : Ball
{
	NSString *name;
}
- (id)initWithName:(NSString *)str;
@property int length;
@end

也可以添加readonly等限制属性。

属性的实现

@implementation Basketball
- (id)initWithName:(NSString *)str{
	if((self = [super init])!=nil){
		name = str;
	}
	return self;
}
- (int)lengh{
	return 10;
}
@end

也可以通过@synthesize,一行内生成getter和setter。

@synthesize name;

也可以通过@dynamic手动声明

@dynamic length;
@synthesize

通常情况下@property声明的属性名称和实例名称是一样的,但有时候会不同可以通过@synthesize绑定。

@synthesize length = high;/*完成绑定*/ 

通过@synthesize自动生成实例变量

给属性指定选项

种类选项说明
读写属性readonly只读
readwrite读写
赋值时候的选项assign单纯赋值
retain进行保持操作
unsafe_unretained同assign一样(ARC)
strong同retain一样(ARC)
weak弱引用(ARC)
copy复制对象
原子性操作nonamatic非原子性操作、非线性安全

最后这个原子性是多线程中使用的,如果是原子性的就意味着在多线程下访问属性是安全的,在执行过程中不能打断,而nonamatic则是不安全的,但是对于使用频繁且不考虑多线程竞争的访问方法,可以加上nonamatic。

属性的继承

子类可以使用父类中定义的属性,也可以重写访问方法,但是同父类中的指定名称必须完全一样(特殊情况即是父类定义的readonly在子类中可以变成readwhite)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值