欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OC重新开始(八)属性

程序员文章站 2022-07-15 17:11:17
...

属性

属性的概念

一般来说属性指的是一个对象的属性特征。类似于一个篮球把它当做一个对象的话,篮球的价格、大小就是它的属性。而在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)

相关标签: OC 属性