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
  • 相关阅读:
    SSH批量部署服务
    rsync配置
    你到底有没有资本
    QT4.8.5 源码编译记录
    kernel 4.4.12 移植 HUAWEI MU609 Mini PCIe Module
    AM335x 添加 HUAWEI MU609 Mini PCIe Module,并用pppd 启动相关设备
    u-boot bootz 加载kernel 流程分析
    Linux kernel 之 socket 创建过程分析
    Linux kernel 之 uart 驱动解析
    am335x 无屏实现开关机程序
  • 原文地址:https://www.cnblogs.com/code-style/p/3956429.html
Copyright © 2011-2022 走看看