OC第十天 内存管理高级
来源:互联网 发布:windows 调试模式 编辑:程序博客网 时间:2024/06/07 04:58
属性的语义特性以及使用范围:
assign 一般用于基本数据类型 ,因为基本数据类型的内存不需要我们管理, 但是也可以用于对象 不过会产生野指针异常的问题,需要对原本的set,get方法进行修改
现在有个Person类 有个name属性
如:`Perosn *per = [[Person alloc]init]; // 用alloc进行定义,以便我们进行内存管理,类方法不需要管理.
NSString *name = [[NSString alloc]initWithFormat:@”王”];
p.name = name;
[name release];
NSLog(@” %@ “,p.name); // name已经被释放掉了,还在使用,野指针异常
对set方法进行修改
- (void)setName:(NSString *)name
{
if (_name != name) { // 判断传进来的值和现在的值等不等
// 如果你对空release
// 相当于什么都没做
[_name release]; // 这句话是将原来的_name的计数-1 释放掉
_name = [name retain]; // 计数+1 ,name计数为2,release后对象也不会释放掉
}
}
`
-(void)dealloc 写在.m的最上面,计数为0的时候会调用这个方法,进行释放空间 [super dealloc]
学了属性和内存之后,不要出现_name 全部都写self.name 在自定义初始化方法里将 _name = name 改成 self.name = name; 为了保证内存的安全
类方法中写成这样: 最后返回值写成: return [p autorelease];
Collection 的内存管理
数组在添加元素时 : 如果你把一个元素 添加到容器类对象中(数组,字典,集合中)那么系统将自动给数组中的元素发送retian消息 从而使数组中的元素引用计数+1
数组在释放时: 如果数组释放时,那么在释放之前,系统会自动给数组中的一个元素 发送release消息 从而使数组中的元素引用计数-1
字典也是这样的
多态的真谛: 父类指针指向子类对象 继承关系才有多态
- OC第十天 内存管理高级
- OC高级内存管理
- OC 内存高级管理
- OC内存管理高级
- OC第十天:内存管理⾼级
- iOS笔记:第十篇 OC 内存管理
- 随意细解:OC -- 内存管理高级
- iOSDay18之OC内存管理高级
- OC内存管理高级编程(原书章节截取)
- 进击的KFC:OC(十)内存管理高级
- OC内存管理-OC笔记
- OC内存管理
- Oc-内存管理
- OC内存管理
- OC 内存管理
- oc 内存管理
- OC内存管理
- oc -内存管理 笔记
- c++ explicit
- C标准库(1)
- PS学习笔记(三)——蒙版的使用
- 工作中的log4j
- 关于'MAMapKit/MAMapKit.h' file not found的解决方法(图文演示)
- OC第十天 内存管理高级
- SVN版本冲突解决详解
- ZOJ2975 Kinds of Fuwas
- Android系统安全大纲
- 安卓xml序列化和pull解析笔记
- 关于bootstrap小图标的使用
- hibernate的懒加载和抓取策略解析
- Spark架构设计和运行机制简述
- SVN合并(merge)的使用