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

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/ytmaylover/p/5049203.html
Copyright © 2020-2023  润新知