zoukankan      html  css  js  c++  java
  • iOS开发之--属性关键字以及set和get方法

    一、属性分为三大类

    1、读写性控制

      a.readOnly只读,只会生成get方法,不会生成set方法

      b.readWrite可读可写,会生成set方法,也会生成get方法(默认设置)

     2、setter相关修饰符

       a、assign:表示直接赋值,用于基本数据类型,包括id类型,这个修饰符不会牵涉到内存管理,但是如果是对象类型,使用此修饰符则可能会导致内存泄露

       b、retain:针对对象类型进行内存管理,如果对基本数据类型使用,则X-code会直接报错,当给对象类型使用此修饰符时,setter方法会先将旧的对象属性release掉,在对新的对象进行一次赋值并进行一次retain操作;

       c、copy:主要用在NSString类型,表示赋值内容

      系统默认属性是assign,retain是指针的复制不重新分配内存空间,copy是内容的复制;

     3、原子性属修饰符:atomic | nonatomic

        atomic:表示是线程安全的

        nonatomic:表示是非线程安全的,使用此属性性能会提高一些

        系统默认是atomic

    4、getter和setter修饰符

       这两个属性修饰符用于社差自定义生成的getter和setter方法名,使用之后将不再使用系统默认的setter和getter方法名;

    1、在头文件中用@property声明一个属性名,编译器会自动为我们转换成这个属性名的getter方法和setter方法。

    2、在实现文件中使用@synthesize propertyName,编译器先会查找这个属性名的setter方法和getter方法有没有被人为实现,如果已经实现,则不再实现,如果没有,则会帮我们生成一个属性命的setter方法和getter方法。

    3、当在实现文件中使用了@synthesize propertyName,编译器还会做一件事情,在类成员变量中查找一个名为_propertyName的成员变量,如果没有,再继续查找名为propertyName的成员变量,如果这两个都没有,编译器会自动为我们生成一个私有的名为_propertyName的成员变量。注意,系统自动创建的都是私有的。

    4、当在实现文件中这样写@synthesize propertyName = varName;时,setter和getter方法所对应的是一个名为varName的成员变量,修改和读取的是varName成员变量的值。

    5、当我们在实现文件中不写@synthesize propertyName时,在Xcode 4.5之前的版本不会帮我们自动实现setter和getter方法,系统当然也不再会为我们生成对应的成员变量。但是在Xcode 4.5之后可以不用写@synthesize了,就跟3、4一样了。

    6、当我们既定义了@synthesize,又在实现文件中人为重写setter和getter方法时,那么@synthesize将不再工作,也就不会为我们创建没有定义的_propertyName成员变量了,这时候如果在setter和getter方法中调用_propertyName将会发生编译错误

      

  • 相关阅读:
    初识《构建之法》
    实验十四 课程学习总结-韩艳艳(201671030109)
    201671030109 韩艳艳 《英文文本统计分析》结对项目报告
    201671030109 词频统计软件项目报告
    201671030109 韩艳艳 实验三作业互评与改进报告
    ----初读《构建之法》的疑虑
    201671030111 李蓉 实验十四 团队项目评审&课程学习总结
    201671030111李蓉《英文文本统计分析》结对项目报告
    201671030111 词频统计软件项目报告
    201671030111李蓉 实验三作业互评与改进报告
  • 原文地址:https://www.cnblogs.com/hero11223/p/10475590.html
Copyright © 2011-2022 走看看