内存管理 - CocoaChina

来源:互联网 发布:win10网卡mac地址 编辑:程序博客网 时间:2024/06/02 02:16
1.Arc自动引用计数,当被持有的时候引用计数加一,被释放时则减一,autorelease,自动释放池,运行结束自动减一。MRC下内存管理问题:释放一个堆内存时,首先要确定所有指向它的指针全部被释放了。避免提前释放。 释放指针指向的堆空间,首先要确定哪些指向同一个内存,避免多次释放。模块化操作,不能知道最后由谁释放,多线程操作时,不能确定那个线程最后使用完。

ARC问题:避免循环引用,死循环。

2Block为什么使用copy。

MRC上留下来的传统,因为是从栈区留下来的,方法内容储存在栈区,ARC自动进行copy操作,然后nsstring存储在栈区,nsmutablestring则储存在栈区,因为要修改。然后他为什么用copy,是因为防止指针指向错误,修改了可变string同时修改了nsstring,这是不允许的。

,假如有一个NSMutableString,现在用他给一个retain修饰NSString赋值,那么只是将NSString指向了NSMutableString所指向的位置,并对NSMUtbaleString计数器加一,此时,如果对NSMutableString进行修改,也会导致NSString的值修改,原则上这是不允许的.如果是copy修饰的NSString对象,在用NSMutableString给他赋值时,会进行深拷贝,及把内容也给拷贝了一份,两者指向不同的位置,即使改变了NSMutableString的值,NSString的值也不会改变.

3runloop ,自动释放池,和线程之间的关系
每个线程都包含一个runloop,对于每个runloop系统都会隐式的创建一个自动释放池,runloop结束时就会释放掉自动释放池,引用计数减一。
4@property,包含一个实例变量,级一个存取方法。

 

7,

assign其实也可以修饰对象,但是修饰的对象在被释放之后,其指针不会置为Nil,如果后续内存分配用到这地址,会崩溃,儿weak则全部置为nil。_block修饰的变量可以在block中被修改,其引用计数也会加一,但是_weak则不会加一。

 

0 0
原创粉丝点击