天天看点

IOS 的内存管理理解

有”创建“就要有”销毁“ 针对创建和销毁过程进行管理

OC采用”引用计数“管理内存 1、使用alloc为对象分配内存,使用dealloc释放对象所占用的内存 2、使用alloc、new或者copy够着对象时,对象的retainCount为1 3、调用对象的retain方法可以增加1 retainCount 4、调用对象的release方法可以减少1 retainCount 5、当对象的retainCount为0时,dealloc会自动调用,释放对象内存;否则,分配给对象的内存将会被一直占用。 6、所有对象可以使用retainCount属性查看当前的计数器值。

申请内存的权利有两种 1是程序员 2是系统

会影响计数器的操作 1、alloc创建一个对象,并将其引用计数器设为1,并拥有对象的所有权 2、copy制造一个副本,并将副本的引用计数器设为1,并拥有副本的所有权,然后释放旧对象 3、retain使对象计数器加1,并拥有对象所有权 4、release使对象计数器加1,并拥有对象所有权 5、autorelease向autoreleasepool注册

一个类中,如果这个类属性声明retain或者copy的属性,那么我们需要在这个类的dealloc方法里面释放这个属性

便利构造器 return[stu autorelease]; 不立即释放,而是交给autoreleasepool

内存释放原则: 1、谁申请谁释放 2、凡是出现retain、alloc、copy的地方,都应出现release与之匹配使用。 3、a 内存无法确定释放时间时,可以只用autorelease向最近的池注册       b 由池决定释放所有池的时间       c 使用便利构造器获得的对象,都应是autorelease的

retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的引用计数为1

1、使用copy:对NSString 2、使用retain:对其他NSObject和其子类

strong和weak关键字的意义和使用方法 @property(strong) MyClass * myObjiect; 相当于:@property(retain)  MyClass * myObjiect;

@property(weak) MyOtherClass * delegate; 相当于: @property(assign) MyOtherClass * delegate;

一般情况下,所有的指针都是强指针