内存管理问题的总结(最强王者组:胡鹏飞 孙晓萌 张西辉 王振波)
来源:互联网 发布:135端口还有漏洞吗 编辑:程序博客网 时间:2024/05/16 13:46
1.内存管理的基本原则: 如果对一个对象进行alloc ,retain ,copy 之后,你就拥有了该对象的所有权,你就必须对它进行release或者autorelease2.内存管理常用的计数方法: Manual Reference Count(MRC),人工引用计数 Auto Reference Count(ARC),自动引用计数3.People *per1 = [[People alloc] init]; //0 - 1 alloc 开辟内存空间,并且将对象的引用计数由0变1. NSLog(@"%ld",[per1 retainCount]);retainCount 用来获取当前对象的引用计数 People *per2 = [per1 retain];//1-2 retain 将对象的引用计数加1 [per2 retain];//2-3 [per2 release];//3-2 release将对象的引用计数(立即)-1 [per2 release];//2-1 [per2 release];//1-0在次,如果你在[per2 release];一次,就会出现过度释放问题.下面给出原因,解决方案. 现象:当写完和内存引用计数-1有关的操作后,程序立即crash 原因:空间被系统回收之后,不能在做和引用计数-1有关的操作,否则立即crash 解决方案:删除同时,在这里还会存在另一个问题:野指针现象 现象:可能会崩溃,也可能不会崩溃,写到某一行代码时突然崩溃,(没有写任何和引用计数相关的代码) 产生原因:该对象的空间已经被系统回收,不能访问没有所有权的对象 解决方案:空间被系统回收之后,禁止访问4.autorelease (1) autorelease 会将声明为autorelease的对象放入离它最近的自动释放池中,当自动释放池销毁时,会向池中的每一个对象发送一个release消息 (2) autorelease 使用方式有两种: 1). NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; People *per = [[People alloc] init];//引用计数0 -1 NSLog(@"%ld",[per retainCount]); [per autorelease];//1 -0 [pool release]; (不经常用) 2).@autoreleasepool { People *per = [[People alloc] init];//引用计数0 -1 [per autorelease];//1 -0 }下面给出两道练习题:1.@autoreleasepool { for (long i = 0; i < 10; i ++) { People *per = [[People alloc] init]; [per autorelease]; } }在这道题中,存在内存泄露问题,只开辟空间,延缓释放,从而导致内存泄露问题.解决方案如下: @autoreleasepool { for (long i = 0; i < 10; i ++) { @autoreleasepool { People *per = [[People alloc] init]; [per autorelease]; } } }2.@autoreleasepool { NSString *per =[[NSString alloc] init]; [per retain]; [per retain]; per = @"aa"; [per release]; [per release]; [per release];在这道题中,由"aa"在常量区,per = "aa" 是指针变量重指向,从而导致两个问题:1.内存泄露 2.管理常量区的空间解决方案:去掉per ="aa",常量区的空间是由系统管理的 }
0 0
- 内存管理问题的总结(最强王者组:胡鹏飞 孙晓萌 张西辉 王振波)
- 总结(最强王者组 王振波 胡鹏飞 孙晓萌 张西辉)
- 最强王者组(张西辉 孙晓萌 胡鹏飞 王振波)
- 字典与集合类总结(最强王者组:王振波,胡鹏飞,孙晓萌,张西辉)
- NString 与 NSMutableString 最强王者组 组员:张西辉 孙晓萌 胡鹏飞 王振波
- 内存管理问题的总结
- Oc NSArray 整理(最强王者组)
- 内存管理问题总结
- iOS内存管理的问题总结
- 腾讯阿里龙虎斗—谁是投资界的最强王者?
- 内存管理的总结
- 内存管理的简单总结
- 关于内存管理的总结
- 内存的问题和管理
- string的内存管理问题
- 内存管理的基本问题
- NSString的内存管理问题
- 王者荣耀: S7赛季官方最强英雄排名, 第一分分钟被削的节奏!
- 栈的表示和实现
- Hive中小表与大表关联(join)的性能分析
- hdu 3335
- FastDFS安装、配置、部署(一)-安装和部署
- matlab中 fprintf 和disp的用法
- 内存管理问题的总结(最强王者组:胡鹏飞 孙晓萌 张西辉 王振波)
- ③如能再活一辈子
- 高通平台mipi panel kernel读包方法
- hdu 4619
- FZU - 2107 Hua Rong Dao(回溯)
- 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit
- Centos7.0的几个新特性
- ViewHolder模式超简洁写法
- sqlite3 表里插入系统时间(时间戳)