OC基础:属性.点语法.KVC

来源:互联网 发布:mysql 最多从库 编辑:程序博客网 时间:2024/05/22 23:58

属性:快速生成setter和getter

属性也包括:声明和实现

1.属性的声明写在.h中

格式:@property 数据类型 变量名;

如果实例变量一致的时候,属性的声明可以合并,每一个属性之间使用,分隔

2属性的实现写在.m中

格式:@synthesize 数据类型 变量名;

Xcode5.0之后,属性的实现部分也不需要写了

当你同时重写settergetter,系统就不会再自动生成@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 *)];



0 0