码迷,mamicode.com
首页 > 其他好文 > 详细

OC8-属性 KVC是键值编码

时间:2015-12-15 19:32:15      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

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 的生命力,是它存在的意义。

OC8-属性 KVC是键值编码

标签:

原文地址:http://www.cnblogs.com/ytmaylover/p/5049203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!