OC-049.集合中的内存管理(MRC和ARC)

来源:互联网 发布:中国软件龙头股 编辑:程序博客网 时间:2024/05/17 15:57

1.MRC中,集合的内存管理

·当你添加一个对象到集合,集合就会对这个对象进行一次retain的操作
·当你从集合中删除一个对象的时候,集合就会对这个对象进行一次release的操作
·当集合销毁的时候,会对集合中所有的元素进行一次release操作

#import <Foundation/Foundation.h>//------main.m#import "LSMe.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        LSMe *me = [[LSMe alloc] init];        NSLog(@"%zd",me.retainCount);//1//    NSMutableArray *array = [NSMutableArray array];如果是类方法,在出自动释放池才释放LSMe        NSMutableArray *array = [[NSMutableArray alloc] init];        [array addObject:me];//添加一个元素,集合会对这个对象retain一次        NSLog(@"%zd",me.retainCount);//2//        [array removeObject:me];//删除一个元素,集合会对这个对象release一次        [array release];//集合销毁时,里面所有的对象都会被release一次        NSLog(@"%zd",me.retainCount);//1        [me release]; //LSMe释放了        }    return 0;}
#import <Foundation/Foundation.h>//------LSMe.h@interface LSMe : NSObject@end
#import "LSMe.h"//------LSMe.m@implementation LSMe-(void)dealloc{    NSLog(@"%s",__func__);    [super dealloc];}@end



2.ARC中,集合的内存管理

·当你把一个对象添加集合中。集合就会对这个对象有一个强引用(指针)
·当你从集合中删除一个对象的时候,集合就会释放掉对这个对象强引用(指针)
·当数组销毁的时候,它会释放调用其所有元素的强引用

#import <Foundation/Foundation.h>//------main.m    LSMe.h和.m省略了,.m请重写dealloc#import "LSMe.h"int main(int argc, const char * argv[]) {    @autoreleasepool {         LSMe *me = [[LSMe alloc] init];         NSMutableArray *array = [[NSMutableArray alloc] init];//       me = nil; 在这边清空指针 me会释放,没有强指针指向me了        [array addObject:me];//添加一个对象,集合会对这个对象有一个强指针指向//        [array removeObject:me];//删除一个对象,会释放这个强指针         me = nil;        array = nil;//释放数组的时候,它里面所有的强指针都将释放          }    return 0;}


0 0
原创粉丝点击