zoukankan      html  css  js  c++  java
  • Objective-C property属性解析

    @interface …
    @property (原子性,可写性,内存管理) id name;
    @end
    原子性:    nonatomic, atomic   默认atomic
    可写性:    readwrite, readonly  默认readwrite
    内存管理: assign, retain, copy  默认assign
     

    默认值:

    因为这几个属性都有默认值,所以可以任意指定某个属性或者完全不指定:
    @property id name; //等价于下一行:
    @property (atomic, readwrite, assign) id name;

    可写性:

    @property id name 会生成两个setter,getter两个访问接口
    -(void) setName:(id)name;
    -(id) name;
    因此readonly说的是只生成getter函数不生成setter函数,默认值说的是两者都生成
     

    内存管理:

    assign 说的是接口任何时候都不会修改对象引用;
    retain 说的是调用setter时会release前一个对象再retain新对象;调用getter时会retain;
    copy   说的是调用setter时会copy新对象, release 前一个对象;调用getter时会retain;
     
    @property (assign) id name; 等价于
    -(void) setName: (id) aName
    {
      self.name = aName;
    }
     
    -(id) name
    {
      return self.name;
    }
    @property (retain) id name; 等价于
    -(void) setName: (id) aName
    {
      if ([self.name retainCount > 0])
      {
        [self.name release];
      }
     
      [aName retain];
      self.name = aName;
    }
     
    -(id) name
    {
      [self.name retain];
      return self.name;
    }
    @property (copy) id name; 等价于
    -(void) setName: (id) aName
    {
      if ([self.name retainCount > 0])
      {
        [self.name release];
      }
     
      self.name = [copy aName];
    }
     
    -(id) name
    {
      [self.name retain];
      return self.name;
    } 

    结论:

    除了assign属性,使用时必须release对象,否则会内存泄漏!那这样也太麻烦了,感谢ARC
  • 相关阅读:
    八、JVM视角浅理解并发和锁
    七、JVM类加载机制
    六、JVM命令和工具
    五、jvm垃圾回收3(几种垃圾收集器)
    四、JVM垃圾回收2(垃圾收集算法)
    jvm引用类型
    三、JVM垃圾回收1(如何寻找垃圾?)
    【原创】Android 对话框的使用
    【原创】CMD常用命令:解决实际问题
    【原创】开机出现grub rescue,修复办法
  • 原文地址:https://www.cnblogs.com/code-style/p/3956429.html
Copyright © 2011-2022 走看看