三、与内存有关的修饰符
  strong:强引用,ARC中使用,与MRC中retain类似,使用之后,计数器+1。
  weak:弱引用,ARC中使用,如果只想的对象被释放了,其指向nil,可以有效的避免野指针,其引用计数为1。
  readwrite:可读可写特性,需要生成getter方法和setter方法时使用。
  readonly:只读特性,只会生成getter方法不会生成setter方法,不希望属性在类外改变。
  assign:赋值特性,不涉及引用计数,弱引用,setter方法将传入参数赋值给实例变量,仅设置变量时使用。
  retain:表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1。
  copy:表示拷贝特性,setter方法将传入对象复制一份,需要完全一份新的变量时。
  nonatomic:非原子操作,不加同步,多线程访问可提高性能,但是线程不安全的。决定编译器生成的setter getter是否是原子操作。
  atomic:原子操作,同步的,表示多线程安全,与nonatomic相反。
  四、MRC与ARC混编
  MRC与ARC理论上是不能兼容的,也是你如果创建的项目是ARC模式的,在你的代码中是不能使用release,否则会出现内存问题。现在大部分程序都会选择ARC的方式,但是很多第三方的框架是MRC模式,如果想把这些第三方的文件加到自己项目中,需要进行标识,否则编译的时候会出现错误。
  在ARC的项目中,对MRC的文件可以添加编译选项-fno-objc-arc的标识;在MRC的项目中,对ARC的文件可以添加编译选项-fobjc-arc的标识。步骤如下图所示。


 

  把MRC文件转为ARC,实际上是去掉文件中的retain、release,因此也通过下图中方式完成。