IOS内存管理3&之保留环&弱引用&属性保存

来源:互联网 发布:照片转换卡通软件 编辑:程序博客网 时间:2024/05/21 12:48
IOS的闭环链接和属性的内存管理
     IOS过程中我们常常会遇到环链接:就是有A,B两个类。我们在A类和B类互相引用,是的程序可以正常运行。但是在整个程序的过程中两者之间都不能释放,从而造成内存泄露。

@implementation temp{

    id _thing;

}

-(void) setThing: (id)what{

    self->_thing = what;

}

temp *m1 = [tempnew];

temp *m2 = [tempnew];

m1.thing = m2;

m2.thing = m1;


此时就会出现弱连接的结构,解决方式是:_weak id _thing;

使用weak的原理是:在ARC中使用weak弱引用时,该对象会被及记录在一个暂存器列表上,当我们释放对象时会在暂存器列表进行查找,如果找到就会释放内存。所使用的指针就会被置为nil。


Strong是一个与weak相对应的属性

在我们所见到的UIkIt的应用中所有属性都是strong(也就是说strong是默认属性)。


retain:在内存储存中是count+1然后进行重新复制,就是说每次复制都会是ARC的计数器增加。

copy:是重新申请一个内存空间,然后count+1然后进行赋值。

assign:是清空赋值,然后进行复制。count没有加1(是默认属性)。


nonatomic:多线程安全,当多线程进行访问时访问器会对其进行加锁,防止在访问时进行改变同时也增加内存消耗。

atomic:多线程不安全,参照上面。

readonly&readwrite:readwrite(是默认属性)可以进行读写操作,readonly是只读。





0 0
原创粉丝点击