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
  • 相关阅读:
    ios -过滤字符串特殊字符
    ios -解决view遮挡按钮问题
    ios -生成推广海报
    iOS GCD中的dispatch_group
    iOS 关于本地持久化存储的探讨
    iOS “智慧气象”APP中用到的第三方框架汇总
    iOS Swift最简单的Animation
    iOS @property的默认属性
    iOS设置圆角矩形和阴影效果
    iOS应用第三方推送的添加
  • 原文地址:https://www.cnblogs.com/code-style/p/3956429.html
Copyright © 2011-2022 走看看