一、属性是什么
属性(property):一个对象的属性或特性,OC中可以简单理解为类中的方法,和变量
属性声明变量
@interface Person : NSObject
@property NSString* name;
- (id)showClassName;
@end
@property NSString* name;声明在.h接口文件中。凡是用@property关键字属性声明过后。
1、自动生成实例变量。
2、自动生成访问方法。
3、更简单的调用方法,即“.”语法调用即可。
4、属性的内省(instrospection,java中叫反射)。通过内省可以动态查询属性的名称和类型。
@property NSString* name;
这一句话就类似于如下语句。平时大多直接写这样一句话就行了。
@interface Person : NSObject{
NSString * _name;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
@end
@implementation Person
- (void)setName:(NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
@end
Person * p = [[Person alloc] init];
p.name = @"jack";
这样写后也可以使用“.”语法访问。注意语法格式
1、变量一定是“_”下划线在前面。
2、setName驼峰命名,一定要用setName。
3、get关键字不能加,只能写成name。
4、其它类似,只有这样写才能“.”语法访问,固定格式。
二、给属性指定选项
2.1、给属性制定选项的方法
@property(nonatomic,readonly,strong,retain,setter=setValue:) NSString * dadName;
@property可以跟()指定选项
1、显示指定方法名
setter = setValue: //setValue可以取别的名字
getter = value //value可以取别的名字
2、读写属性
readonly // 只读
readwrite / / 读写
3、赋值时的选项
assin // 单纯赋值
retain // 进行保持操作
unsafe_unratained // 同assin,用于ARC
strong // 同retarin,用于ARC
week // 弱引用,用于ARC
copy // 复制对象
3、原子性操作
nonatomic // 非原子性操作、非线性安全
2.2、选项的作用
由于OC应用于,手动引用计数、ARC和垃圾回收三种内存管理方式,根据管理方式的不同,关键字的作用也会不同。这里笔者只讲ARC情况下
选项名称 | 基础数据类型 | 对象类型 |
---|---|---|
未指定任何选项 | 直接赋值 | 警告 |
assign、unsafe_unratained | 直接赋值 | 直接赋值 |
retain、strong | 出错 | 赋值并对新值进行retain |
week | 出错 | 弱引用 |
copy | 出错 | 赋值时建立传入值的一份副本 |
2.3、点语法
OC中点语法的目的就是访问属性。
1、注意id类型,void类型和C中的数组类型不能用点语法。
2、点语法可以连用,比如 person.dog.name = @“jack”;
3、递增和点语法 temp = obj.age++; 相当于如下代码
[boj setAge:[obj age] + 1];
4、复合赋值表达式和点语法 obj.age *= 2;相当于如下代码
[boj setAge:[obj age] * 2];
5、self使用点操作符可以访问类中自己的方法。注意,不要在访问的方法中使用self,否则就会中造成无限循环递归,无法终止。
6、super 使用点操作符用来调用父类中的setter/geter方法。
7、类中没有参数的方法都可以用点操作符和getter一样调用。