野指针、内存泄露
2015-07-31 08:54
363 查看
#import <Foundation/Foundation.h> // 1 野指针 提前释放和重复释放 // 2 内存泄露 //内存管理原则(配对原则):只要出现了 new,alloc,retain,copy,就一定配对出现一个release,autorelease #import "Person.h" void test() { // 1 内存泄露的第一种情况 // //1 // Person * p = [[Person alloc] init]; // NSLog(@"%lu",p.retainCount); // //2 // [p retain]; // //3 // Person * q = [p retain]; // //2 // [p release]; // //1 // [q release]; // // 对象的 retainCount != 0 的时候不会调用 dealloc 函数销毁对象,对象会一直存在内存中造成内存泄露 // 2 内存泄露的第二种情况 Person * p = [[Person alloc] init]; NSLog(@"%lu",p.retainCount); p = nil; // // [p release]; //[nil release] NSLog(@"%lu",p.retainCount); } void test2() { // 2 野指针 操作以及避免 Person * p = [[Person alloc] init]; NSLog(@"%lu",p.retainCount); Person * q = [p retain]; [p release]; p = nil; // 程序访问了不可访问的内存空间 // 在指针 release 之后将指针置为 nil; [q release]; q = nil; [q run];//[nil run] } int main(int argc, const char * argv[]) { @autoreleasepool { Person * p = [[Person alloc] init]; NSLog(@"%lu",p.retainCount); [p release]; // 在一个对象调用 dealloc 函数销毁之后是不会起死回生的 // EXC_BAD_ACCESS 访问了不可访问的内存空间 //[p retain]; } return 0; }
相关文章推荐
- 水果
- 将博客搬至51CTO
- C++如何生成自己的静态库(lib)文件
- 激活Windows 10 正式版
- Slideout.js – 触摸滑出式 Web App 导航菜单
- 内存管理的基本问题
- org.apache.jasper.JasperException: Unable to compile class for JSP:
- java简单选择排序
- 简单myshell的实现
- UITextField
- UIButton 学习笔记
- 支持高并发的IIS Web服务器常用设置
- 计算机视觉领域协会、出版社及相关高水平期刊、会议
- redhat下本地yum源配置
- Catch That Cow(POJ--
- Word Search
- UVA - 11400 Lighting System Design
- iBatis开发详解(10)---------------操作DDL和映射继承
- ABP之动态WebAPI(一)
- VK Cup 2015 - Finals, online mirror F. Clique in the Divisibility Graph 数论