属性:快速生成setter和getter
属性也包括:声明和实现
1.属性的声明写在.h中
格式:@property 数据类型 变量名;
如果实例变量一致的时候,属性的声明可以合并,每一个属性之间使用,分隔
2属性的实现写在.m中
格式:@synthesize 数据类型 变量名;
Xcode5.0之后,属性的实现部分也不需要写了
当你同时重写setter和getter时,系统就不会再自动生成@synthesize name=_name;
属性的优化
1.声明的时候同一种数据类型可以合并
2.实例变量可以省略(系统自动添加)
3.属性的实现可以省略
--------------------------------------------------------------------------------------------------------
属性的属性(默认是readwrite)
写在.h文件@property后的()中 如:@property(属性)
读写组:
用来控制setter和getter的实现
readwrite 可读可写 自动生成setter和getter
readonly 只读 自动生成getter
重名组:
用来为setter和getter重命名
setter为set方法重命名 setter=方法名
getter为get方法重命名 getter=方法名
//重写set方法的方法名时,要加:
//如果一个属性是BOOL类型,要对getter方法重命名
原子性(默认atomic):
atomic:原子性,同一时刻时,只能使用setter或者getter(只能用其一),单线程比较安全,但效率比较低
nonatamic:非原子性,多线程不安全,但效率高
//当你重写setter和getter时,需要把原子修饰符改为nonatomic
内存管理组(默认是assign)
assign默认,操作非对象类型(基本数据类型)
retain 操作对象类型
copy 操作对象类型,对象要遵循NSCopying
//NSString 属性一般使用copy
点语法 .
如:
girl.name=@"黄图哥'; //等于[girl setName=@"黄图哥"];
girl.name; //相当于[girl name];
当.语法后面跟着=,相当于setter
当.语法后面什么都没有跟,相当与getter
注意:只有当实例变量拥有setter和getter时,才能使用.语法
--------------------------------------------------------------------------------
KVC
key-value-coding 键值编码,使用间接访问实例变量的方法
使用KVC访问 name
通过KVC中key去类中找实例变量,先判断有没有实例变量name,如果没有再去找_name,有就访问即可.
即使实例变量没有setter和getter,也能通过KVC为实例变量赋值和取值.
为了避免通过KVC编码的赋值和取值因为没有key值(不存在实例变量),出现程序奔溃(crash),需要在所在类的.m文件中,重写setValue和valueForUndefinedKey
使用:
[对象名 setValue:(id) forKey:(NSString *)]
[对象名 valueForKey:(NSString *)];
版权声明:本文为博主原创文章,未经博主允许不得转载。