面试题-关键字

来源:互联网 发布:台湾省政府 知乎 编辑:程序博客网 时间:2024/05/18 02:07

1. @dynamic @synthesize @property

  • @dynamic: 告诉编译器存储器方法将在运行时生成。
  • @synthesize: 告诉编译器为你创建存取器方法(getter和setter)。
  • @property: 高所编译器创建存取器方法,并且能够通过点语法和消息访问。

Nonatomic

nonatomic用于多线程。
当属性申明为nonatomic(非原子性)时,任何其他的线程能线程安全地存取对应对象的对应属性。

Copy

  • 当想要获得一个对象的不可变副本时使用copy。
  • 不可变指得到的新的副本的属性不会被之后该对象的其他拥有者修改。
  • 使用完成后需要释放对象,因为使用copy会持有新产生的副本对象。

Assign

  • Assign某些方面与copy相反。
  • 当返回一个assign属性时,它返回一个对实际对象的引用,而不是副本的引用。
  • 一般基本属性用该关键字修饰(float,int,BOOL…)

Retain

  • 当属性为一个指向对象的指针时使用retain修饰。
  • 通过@synthesize产生的setter方法retain对象。
  • 不再使用对象时需要release。
  • 使用retain将会增加对象的引用计数和自动释放池中的内存消耗。

Strong

  • strong是在OC的ARC中对retain属性的一个替代。
  • 在非ARC中,它和retain是一样的。

Weak

  • weak与strong类似,但它不会使引用计数加1。
  • 它不会成为对象的持有者,指示保持一个指向对象的引用。
  • 如果对象的引用计数减为0,即使仍然有一个带有weak修饰的指针指向它,该对象仍会从内存中释放。
0 0
原创粉丝点击