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
  • 相关阅读:
    中国建设银行接口使用详细说明
    Web Service入门
    支付宝及时到帐接口使用详解深入版
    C#仿QQ皮肤-ComboBox 控件实现
    SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)(2)
    GridView 使用方法总结 (二)
    小谈c#数据库存取图片的方式
    SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)(1)
    GridView 使用方法总结 (一)
    C# UDP 入门
  • 原文地址:https://www.cnblogs.com/code-style/p/3956429.html
Copyright © 2011-2022 走看看