MRC内存管理1
来源:互联网 发布:鸟哥php 编辑:程序博客网 时间:2024/06/06 05:32
野指针和内存泄露// 1.内存泄露 Person *person = [[Person alloc]init]; // 1 NSLog(@"person count = %ld",person.retainCount); [person retain]; // 2 Person *person1 = [person retain]; // 3 [person release];// 2 [person1 release];// 1 // 配对原则 // 对象的retainCount != 0的时候 不会调用dealloc方法 // 函数销毁对象,对象会一直存在内存中造成内存泄露 // 2.内存泄露 Person *person2 = [[Person alloc]init]; person2 = nil;// [person release]; NSLog(@"person2 --- = %ld",[person2 retainCount]); // 0// 3.野指针 Person *person3 = [[Person alloc]init]; NSLog(@"person3 count = %ld",person3.retainCount); Person *person4 = [person3 retain]; [person3 release]; [person4 release]; // NSLog(@"person3 count = %ld",person3.retainCount); // 打印野指针的retainCount person3 = nil; person4 = nil; [person3 run]; // [nil run]; // 对象访问了不可访问的空间 // 4. // 在一个对象调用dealloc 函数销毁之后 // 是不会起死回生的 Person *person5 = [[Person alloc]init]; [person5 release]; // EXC_BAD_ACCESS 访问了不可访问的内存空间 [person5 retain]; // 单个对象的内存管理 Person *person = [[Person alloc]init]; NSString *string = [NSString stringWithFormat:@"hello world"]; person.name = string; person.age = 21; NSLog(@"%@",person); NSLog(@"%ld",[person.name retainCount]); // [string release]; // NSString *string = @"test";// 不需要释放,属于常量类型,程序会把这部分数据放到全局变量存储区 // NSString *string1 = [NSString stringWithFormat:@"test"];// 种类型生成的NSString是autorelease类型的变量,不需要释放,程序一次runLoop结束后就会释放。 // NSString *string2 = [[NSString alloc]initWithFormat:@"test"];// 这种类型的需要释放,因为alloc过了,需要手动用release释放, NSLog(@"%p %p",[person name],string); [person release]; NSLog(@"%ld ",string.retainCount); person = nil; }setter方法的内存管理- (void)setCar:(Car *)car { if (car != _car) { [_car release]; // 第一次为nil release没事 ///在setCar 的时候让car的retainCount+1 拿到car的强引用 _car = [car retain]; } }- (void)dealloc { [super dealloc]; // 保证person对象销毁的时候,它所强引用的car也被销毁,防止出现内存泄露 [_car release]; NSLog(@"person is dealloc");}循环引用 /* 与@property内存管理有关的参数 retain 生成符合内存管理原则的set方法 assign 直接赋值,不考虑内存管理 nonatomic 不生成多线程相关的代码 readonly 只生成getter方法 readwrite 生成getter和setter方法 @property (nonatomic,assign,setter = isVip:,getter = isVip) BOOL isVip; */@property (nonatomic,retain) Car *car;// 如果重写了setter和getter方法,property就不会再生成 _car// 需要自己声明成员变量 _car 在 .h中 或者 在@synthesize 后面// 如果程序中出现了相互引用问题,那么一端一定要改成弱引用方式
0 0
- MRC内存管理1
- 内存管理arc,mrc
- 内存管理- MRC
- 内存管理 ARC + MRC
- MRC内存管理
- 内存管理与ARC、MRC
- OC 内存管理之MRC
- Objc内存管理之MRC
- OC内存管理(二)--MRC
- 内存泄露之手动内存管理(MRC)
- MRC ARC 内存泄露 内存管理
- Objective-c - 内存管理(ARC/MRC),第一个MRC程序
- 内存管理由mrc转为arc
- OC-内存管理(MRC)代码规范
- iOS 内存管理ARC与mrc
- OC内存管理--MRC&ARC
- iOS内存管理以及MRC、ARC
- OC内存管理 MRC与ARC
- 开源小小调试器-MiniDebugger
- HDU 1282 回文数猜想
- 消息队列
- Linux 利用管道父子进程间传递数据
- python逐行读取文件
- MRC内存管理1
- elipse安装Genymotion插件时候输入网址没有显示可以下载的
- 测特定指令执行时所需消耗的时间及系统资源
- VirtualBox开启显卡3D加速
- 【Java多线程】之二:Java Thread Sleep Example
- C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么?还有整形数组作函数参数的问题?
- 字符串加解密
- C语言:整体运行流程
- OTL、OCL、BTL电路及其判断方法