内存管理(2)
copy,assgin,retain区别:
assgin是直接赋值,取的是一个别名,用于基础数据类型(NSinteger)和基本数据类型(int,float,double,char等),是对一个对象进行操作就是对另一个进行操作,retaincount不会加1.
retain:保留赋值,释放旧对象,再将将旧对象值赋予输入对象,引用计数为2.retain是指针拷贝,在栈上拷贝一份,内容是相同的,都指向堆上相同位置。
copy:建立新对象,然后释放旧对象,引用计数也加1,是真正拷贝对象。在栈上复制一份,内容不相同,地址也不相同,所以分别指向堆的不同内存地址。
nonatomic和atomic区别:
atomic存在线程保护,防止写未完成时被另一个线程读取,造成数据损失,默认情况下是原子性。
nonatomic不存在线程保护,是多线程,是非原子性,多线程可以提高访问效率。
readwrite和readonly区别:
readwrite:默认情况下是readwrite,设置可访问级别 。
readonly:表示只读,只生成getter方法,不生成setter方法。
使用便利构造器时,不用自己管理内存。
ARC:(Automatic reference counting)自动引用计数,oc支持垃圾回收机制,但是在apple移动终端还不支持,需要我们自己手动管理内存。ARC实现原理是在编译期间,他会自动插入retain,release,autorelease,不影响性能。