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
- OC-049.集合中的内存管理(MRC和ARC)
- 黑马程序员 OC中的内存管理及MRC和ARC单个对象的内存管理问题
- 黑马程序员---OC基础---内存管理(MRC、ARC)
- OC内存管理--MRC&ARC
- OC内存管理 MRC与ARC
- OC的内存管理方式----MRC & ARC
- 内存管理arc,mrc
- 内存管理 ARC + MRC
- OC知识--彻底理解内存管理(MRC、ARC)
- OC中的内存管理—MRC
- OC中的MRC内存管理方式
- 内存管理与ARC、MRC
- OC内存管理(ARC)
- OC通讯录(MRC手动管理内存)
- 黑马程序员 --- 内存管理的MRC和ARC
- objective-c中的内存管理——引用计数、ARC与MRC(1)
- OC 内存管理之MRC
- OC内存管理(二)--MRC
- 试试看
- libreoffice demo documetloader
- 简洁代码之道(2):避免全局可变状态
- 理解stm32开漏输出与推挽输出
- NodeJS简单概述
- OC-049.集合中的内存管理(MRC和ARC)
- POJ 3187 Backward Digit Sums(next_permutation()暴力枚举)
- C#中数组、ArrayList和List三者的区别
- 【android】初学安卓,简单布局和activity切换
- C#通过WebClient/HttpWebRequest实现http的post/get方法与java对接
- CATransform3D的一点记录
- MFC获取当前窗口指定区域的图片
- DirectByteBuffer内存申请与释放
- PostgreSQL学习笔记1之表定义