首页 > 代码库 > 关于内存方面,retain,copy,assign

关于内存方面,retain,copy,assign

 

内存管理机制

 引用计数:因为OC中不存在垃圾回收机制,所以才根据引用计数回收机制。当引用计数为0时,销毁空间。也就是说,根据引用计数来确定一个对象是否释放

  可以改变引用计数的操作:allco retain release copy dealloc 

 便利构造器

自动释放池:

 每次对象调用autorelease 方法时(obj-c中的正式说法应该是:给对象发送autorelease消息),对象的引用计数并不是真正变化,而是向pool中添加一条记录,记下对象的这种要求。最后当pool发送drain 或者 release 消息时,池中的所有对象的这种要求一一被执行(即:pool被销毁前,会通知池中的所有对象,全部发送release 消息真正将引用计数减少,如果对象之前没有发送过autorelease 消息)

   retain:引用计数+1 操作,获取对象的所有权,与release 对应。

   线程:注意当视图退出时,需要关闭自己所开线程


   alloc : 开辟空间,引用计数有0变为1,dealloc :销毁空间 手动调用dealloc 时候会强制将引用计数置为0;

   copy:将源数据重新复制一份,原数据引用计数不变,拷贝的一份引用计数+1;复制一个对象,并且存储在不同的内存区,原对象的引用计数不变。遵循NSCoping 协议的可以深拷贝。

   assign :整形或者其他常量的引用计数。不发生改变

   在ARC模式下,strong 与retain相似,strong,用于ARC模式下,表明对象属于强引用,类似retain ,但是比retain更加安全,只要对象存在拥有者,就可以引用,不会被释放,只要对象失去拥有者,立即被抛弃,不必再将已经指向已经释放的对象的指针指向空。避免了野指针。

    weak 类似assign ,弱引用,引用计数不会增加。释放指针自动置为nil

   在ARC模式下,weak 与 assign 相似,

    readwrite:读写,既有setter 和 getter 

    readonly:只有读操作,即只有getter

    nonatomic :非原子特性,不保证多线程下保护安全

    atomic:原子特性,保证多线程下安全,有一个属性需要对个线程同时访问一个变量,使用atomic 能够自动枷锁解锁。

     

本文出自 “久久归一” 博客,请务必保留此出处http://lulun426.blog.51cto.com/9197884/1565371

关于内存方面,retain,copy,assign