Objective-C基础知识点

属性

一.属性(描述类的特征)
1.属性是Objective-C 2.0定义的语法,为实例变量提供了setter和getter方法的默认实现,能在一定程度上简化代码,增强实例变量的访问安全性.
2,属性的定义
2.1.属性的声明: 使用@property声明属性,相当在@interface中声明了两个方法(setter和getter),如:@property (NSString *)name;
2.2.属性的实现: 使用@synthesize实现属性,相当于在@implementation中实现了setter和getter这两种方法,如:@synthesize name = _name;
二.属性的属性
1.为属性提供了一些关键字泳衣控制setter、getter的实现细节,这些关键字我们称之为属性的属性(attri),共有三大类的attribute.

三大类attribute:
第一大类:读写控制
读写控制包括:
readonly: readonly告诉编器,之只声明getter方法,无setter方法 readwrite:告诉编译器,即声明setter方法也声明getter方法
第二大类:原子性控制:
atomic:setter、getter方法在多线程访问下是绝对安全的,即setter、getter内部做了多线程访问处理.原子性控制的默认设置是atomic;
nonatomic:setter、getter内部不会做多线程访问处理
程序开发过程中,setter、getter处处都在⽤用,如果使⽤用atomic,需要不断 的对setter、getter加锁解锁以保证线程访问安全,会很占⽤用系统资源,降低系统性能.
第三大类:语义设置(assign,retain,copy)
assign:setter、getter内部实现是直接赋值.
retain:setter、getter的内部会做内存优化.
copy:setter、getter的内部也会做内存优化

如果属性是非对象类型(比如int,float等)属性的语义设置使用assign,
如果属性是对象类型(比如NSString,NSArray等),属性设置为retain,
如果属性是对象类型并且想得到参数的copy,使用copy关键字

三.点语法
点语法提供了一种快捷的访问方式,凡符合系统默认setter、getter书写格式的方法都可以使用点语法,属性是一对getter、setter方法,点语法是属性的另一种调用格式.
四.KVC(key-value-coding,即键值编码)
KVC是一种间接访问实例变量的方法.
key:键没用于标识实例变量
value:实力变量对应的值

修改值:

第一种形式:
setValue:forKey:
setValue:forUndefinedKey://防止报错

setValue:forKryPath:
setValuesForKeysWithDictionary:

获取值:
valueForkey
valueForUndefinedKey://防止报错
valueForKeyPath:



注意:当key值不存在的时候,会执行setValue:forUndefinedkey:

系统默认实现是抛出一个异常.

KVC距离说明:

//KVC:
//KVC是用来给(没有getter和setter方法的)实例变量赋值和取值
//key一定要跟我们的实例变量一样(下划线可以不要)

//KVC在执行的时候,先去找KEY里面的这个值是否是类的实例变量,如果有就赋值,如果没有,找有没有_key(下划线就是key里面的值)


 /*
        //第一种形式
        [p setValue:@"zhangsan" forKey:@"name"];
        NSLog(@"%@",[p valueForKey:@"name"]);
        
        [p setValue:@"hjadksof" forKey:@"age"];
        NSLog(@"%@",[p valueForKey:@"age"]);
        
        
        Student *stu = [[Student alloc]init];
        
        //KVC
        [stu setValue:@"ajdfkh" forKey:@"name"];
        
        NSLog(@"%@",[stu valueForKey:@"name"]);
        
        [stu setValue:@"m" forKey:@"sex"];
        
        NSLog(@"%@",[stu valueForKey:@"sex"]);
        
        */
        /*
        //KVC第二种形式
        Husband *hus = [[Husband alloc]init];
        Wife *wife1 = [[Wife alloc]init];
        
        //这一句就是给Husband的wife赋值
        [hus setValue:wife1 forKey:@"wife"];
        
        
        //此处(path中)的点是路径的意思(实例变量的实例变量)
        [hus setValue:@"ruhua" forKeyPath:@"wife.name"];
        NSLog(@"%@",[hus valueForKeyPath:@"wife.name"]);
        
        //练习
        
        Woman *femal = [[Woman alloc]init];
        Children *kid = [[Children alloc]init];
        
        [femal setValue:kid forKey:@"child"];
        
        [femal setValue:@"houzi" forKeyPath:@"child.name"];
        NSLog(@"%@",[femal valueForKeyPath:@"child.name"]);
        */
        
        //KVC第三种形式
        NSDictionary *dic = @{@"name":@"Coco",@"age":@"22",@"sex":@"f"};
        
        Model *model = [[Model alloc] init];
        [model setValuesForKeysWithDictionary:dic];
        NSLog(@"%@",[model valueForKey:@"sex"]);

	
//以后每个类的.m中都重写description方法
	
//按照想要的形式打印出对象的信息
-(NSString *)description{
    return [NSString stringWithFormat:@“name:%@ age:%@ sex:%@",_name,_age,_sex];
}
 



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值