OC 8 属性 内存管理组 对象控制组 重命名组 KVC键值编码

1.属性:帮你自动生成set和get方法
属性的格式:
(1)@property  数据类型    属性名    属性的声明:写在(.h)中
属性:属性名就是实例变量声明
@property NSString * gender;
(2)@synthesize 属性名                     属性的实现:写在(.m)中
//相当于setget方法的声明
//如果属性的类型相同的话,此时就可以把他们写在一个属性的声明中,但是每一个属性名前要加星号*;是基本数据类型就不用加*

@property NSString *name,*color;
@property NSInteger age;
@property CGFloat   score;

(3)
//相当于setget方法的实现
//当属性的实现部分可以写在一起,用逗号隔开
//Xcode5.0以后属性的实现就不在写了,极大的提高了编程的速度
//如果不写了,系统默认帮你生成以下语句,自动创建一个_name实例变量,并且自动生成setget方法

//如果实例变量不写
//@synthesize name = _name;


(4)description 唯一不能单独打印的就是self
- (NSString *)description
{
    return [NSString stringWithFormat:@"%@ %ld %.2f %@ %@", _name,_age,_score,_color,self];

(5)当属性帮你生成的set和get方法的实现,不满足你的需求,可以重写set个get方法
(6)当完全重写属性的set和get方法时, @synthesize name =_name  就失效了;解决问题的方法:a.只重写set和get方法中的一个  2.自己添加@synthesize

(7)  return self.name; 方法内部是不能自己调用自己的

2.快捷的访问set和get方法:用点语法

3.属性的优化
(1)属性声明和实现可以合并
(2)可以省略实例变量的声明(系统会自动帮你生成属性名加_下划线的实例变量)
(3)属性的实现可以省略

4.属性的属性:属性的修饰符,主要用类控制set和get方法的实现细节
5.访问控制组
(1)atomic:原子性修饰的属性同一时刻只能使用set和get方法(set和get放发式互斥的),安全,但是效率低默认值
(2)noatomic:非原子性,允许我们同时使用set和get方法,不安全,效率高,推荐使用noatomic
(3)atomic使用场景:在多线程下为保护数据安全可以使用atomic

6.内存管理组
(1)assign  默认值  基本数据类型使用assign修饰,代理属性使用assign修饰
(2)retain  对象类型一般就是用retain
(3)copy   字符串一般使用copy修饰,如果要使用copy修饰属性,这个属性必须遵循NSCopying协议
(4) 属性修饰符写在@property()的后面的小括号中;
属性修饰符可以写多个,每一个修饰符之间用逗号隔开
@property ( nonatomic , copy , readwrite , setter = setAAA:, getter = AAA) NSString *name;
(5)

@property的参数

1)内存管理相关参数

Retain:对对象release旧值,retain新值(适用于OC对象类型)

Assign:直接赋值(默认,适用于非oc对象类型)

Copy:release旧值,copy新值

 

(2)是否要生成set方法(若为只读属性,则不生成)

Readonly:只读,只会生成getter的声明和实现

Readwrite:默认的,同时生成settergetter的声明和实现

 

(3)多线程管理(苹果在一定程度上屏蔽了多线程操作)

Nonatomic:高性能,一般使用这个

Atomic:低性能

 

(4)Setget方法的名称

修改setget方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改名称一般用在布尔类型中的getter

@propery(setter=setAbc,getter=isRich) BOOL rich;

BOOL b=p.isRich;//  调用

7.对象控制组
(1)readWrite:可读可写,系统自动帮你生成set和get方法   默认值
(2)readOnly:只读的,系统自动帮你生成get方法

8.重命名组
(1)setter = setter 新名字
(2)getter = getter 新名字
(3) //苹果的习惯,如果一个属性是BOOL类型的,会对getter方法重命名
@property(nonatomic,assign,readwrite,getter=isFalg)BOOL flag;

9.KVC  key value Coding 键值编码  KVO观察者模式
通过KVC访问实例变量,是一种间接的访问实例变量的形式
(1)通过key值去类中查找实例变量,先判断有没有实例变量name,如果有就赋值,如果没有,接着判断有没有下划线name,如果有就赋值
[man setValue:@"zhangyu" forKey:@"ame"];
    NSLog(@"%@",[man valueForKey:@"_ame"]);

(2) 想通过man这个对象给Girl这个对象的名字赋值@“棉花
 [[man valueForKey:@"girlFriend"]setValue:@"棉花" forKey:@"name"];
   
//通过kvc@“棉花打印出来
   
NSLog(@"%@",[[man valueForKey:@"girlFriend"]valueForKey:@"name"]);
   
(3) //kvc通过路径赋值取值
    [man
setValue:@"菊花" forKeyPath:@"girlFriend.name"];
    
NSLog(@"%@",[[man valueForKey:@"girlFriend"]valueForKey:@"name"]);
    NSLog(@"%@",[man valueForKeyPath:@"girlFriend.name"]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值