• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
hellowbabybaby
博客园    首页    新随笔    联系   管理    订阅  订阅

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

posted @ 2015-12-15 19:17  hellowbabybaby  阅读(216)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3