OC8-属性 KVC是键值编码

1.属性,是oc提供的一种快速的模式化的创建实例变量的方式。

(1)属性是通过@property标记的,

(2)属性会在背后,默默的帮我们做set和get方法

2.属性做的工作

(1)创建一个实例变量,名字是下划线加属性名,

(2)帮我们自动get和setter 的方式,创建一组方法,

3.点语法,点语法是专门为了setter 和getter 方法配备的一种语法糖。会自动根据语法和语境调用是哪一种方法,

(1) (.)其实就是转换成了getter 和setter 方法,p.hobby.length.字符串的长度。

(2)没有getter 和setter 方法的实例变量是没有办法使用点语法的。

4.属性的属性,

attibute,在我们通过属性来创建实例变量的时候,可以通过属性的属性设置来控制实例变量的生成和方法的创建,

3种(1)原子性控制(2)读写控制(3)内存管理控制。第 1和3种参数必须指定,否则会产生内存泄漏,

(1)原子性,原子是最小单位,atomic是oc中的一种线程保护技术,是防止在未完成的时候,被另一个线程使用,造成数据错误。 但是耗内存,推进使用nonatomic

(2)读写  分只读,可读可写。  默认是可写可读的权限。

(3)修改setter getter 方法名:

1)setter getter 是控制生成的get和set 方法的方法名属性

2)对应的getter 方法还是会自动生成,只是名字换成了我们通过参数传递进去的那个名字。

3)在修改setter 的时候,新的名字后面要加(:),否则会报错,getter 后面不需要加(:),

(4)内存控制属性

1)内存管理控制属性。assign,retain/strong,copy,没有垃圾回收,通过引用计数,回收内存,

2)现在xcode默认的事arc,自动引用计数||另外一种是mrc(手动内存管理,)  arc下使用的是strong,mrc下使用的是retain.

3)怎么将arc改成mrc?  去工程的配置文件。buildsetting 搜索 (arc]) (gar),在选项中讲yes 修改为no.

(5)使用原则

1)若属性的类型是基本数据类型,使用assign,

2)若属性的类型存放在堆区的,绝大部分用retain,个别的有特殊需求的需要填写copy.

5.assign 的具体实现:

(1)@synthesize age=_age;创建一个实例变量,变量的名字是( _age),和属性的age产生关联,

(2) set 和get方法的实现

6.KVC是键值编码 key-value-code

(1)作用:是oc提供的一种赋值方式,可以无视访问权限,kvc通过键值对进行对象实例变量的赋值。

setValue forKey会自动调用父类里面的这个方法,将传过来的value的值赋给key对应的实例变量,如果在赋值的过程中发现没有实例变量,会再去调用一遍setvaluue for undifinnedKey;

(2)实现的意义,通过字典,实现批量的数据存储。

[p1 setValuesForKeysWithDictionary:dic];kvc 的生命力,是它存在的意义。

时间: 2024-10-13 12:39:32

OC8-属性 KVC是键值编码的相关文章

【OC学习-31】利用KVC即键值编码来访问一些对象的属性,尽管这些属性是私有的

最简单的想法是我们创建一个对象,然后利用某些方法给这个对象赋值,然后再用某些方法调用这个值.当然这种描述很类似于字典的键值概念,确实今天学习的就是这样一种方法:KVC,Key-Value coding键值编码. (1)简单的KVC 创建一个Book类,在Book.h里写一个私有的实例变量name,然后再main.m里创建一个book1对象,再给这个book1对象的私有变量name赋值,然后再调用这个值.神奇的地方就在这里:这种方法根本不管这个实力变量是private还是public.呃,Book

IOS开发之旅-KVC【键值编码】

在日常开发中,读取修改对象的属性值时,通常是点调用对应的属性进行相关操作.另外一种方式是通过键值编码,简称KVC,在键值编码中主要使用以下方法 /* Given a key that identifies an attribute or to-one relationship, return the attribute value or the related object. Given a key that identifies a to-many relationship, return a

KVC(键值编码)(二十五)

kvc的英文全称是key-value-coding,意思就是键值对编码.用普通的话来说,就是kvc就是通过使用键(字符串)来取值的一种编码.是一种间接访问对象属性的机制,不需要调用getter.setter这些存取方法,就可以直接访问对象属性. 我们声明的变量,有可见度.有些私有的,或者受保护的变量,在其他类中,不能直接使用.我们可以通过kvc,用对象在类外部对实例变量进行访问和赋值.不论是什么可见度的实例变量(private,protected,public). setValue: forKe

kvc(键-值编码)

{ NSString *_name; Author *_author; NSArray *_kvcArray; float price;} //kvc,setValue 的设的值是 “要设置的值” forKey 设置的是对象的属性,如果不是的话要将其转化对象(int folat,char,double) Book *book = [[Book alloc] init]; //        Author *author = [[Author alloc] init]; //        [au

Objective-C(十七、KVC键值编码及实例说明)——iOS开发基础

结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 十七.键值编码 KVC 关于KVC的知识点将通过下列例子来展开说明: Person.h文件,Person类拥有name和age两个成员变量 @interface Person : NSObject { @private NSString *_name; NSInteger _age; } - (void)setAge:(NSIn

KVC - 键值编码

[基本概念] 1.键值编码是一个用于间接访问对象属性的机制,使用该机制不需要调用存取方法和变量实例就可访问对象属性. 2.键值编码方法在OC非正式协议(类目)NSKeyValueCoding中被声明,默认的实现方法由NSObject提供. 3.键值编码支持带有对象值的属性,同时也支持纯数值类型和结构.非对象参数和返回类型会被识别并自动封装/解封. [键值访问] 键值编码中的基本调用包括-valueForKey: 和 -setValue:forkey: 这两个方法,它们以字符串的形式向对象发送消息

ios中键值编码kvc和键值监听kvo的特性及详解

总结: kvc键值编码  1.就是在oc中可以对属性进行动态读写(以往都是自己赋值属性)           2. 如果方法属性的关键字和需要数据中的关键字相同的话                  3. 动态设置:setValue:属性值 forKey:属性名(用于简单的路径)/setValue:属性值 forKeyPath:属性名(用于复杂的路径)kvo键值监听  永久性的监听item属性值的改变,如果改变就从新设置             1.监听方法:[addObserver:self

iOS学习笔记(6)键值编码——KVC

在KVC编程方式中,无论调用setValue:forKey:方法,还是调用valueForKey:方法,都是通过NSString对象来指定被操作属性,其中forKey:标签用户传入属性名的. 对于setValue:属性值[email protected]“name”;代码,底层的执行机制如下. (1)程序优先考虑调用“setName:属性值;”代码通过setter方法完成设置. (2)如果该类没有setName:方法,KVC机制会搜索该类名为_name的成员变量,无论该成员变量是在类接口部分定义

键值编码和通用编程

键值编码(KVC)是Cocoa一个通用的用于获取和设定值的一个协议.在编程中,“通用”这词是用于描述一种可以适用于不同情境的实现方式.通用代码可以减少项目中代码总量并使得软件可以处理程序员无法预知的情景.Cocoa至始至终都很重视通用.可复用代码. KVC版看起来需要更多代码输入.让就让我选择一个更能体现KVC价值的场景. 首先,我们定义一个类: @interface CDCPerson : NSObject {     NSString * firstName;     NSString *