Object-c内存管理简介
来源:互联网 发布:郑州电力编程招聘 编辑:程序博客网 时间:2024/06/18 04:56
1 自动垃圾回收
系统自动检测对象是否拥有其他对象,不再有引用的对象将会被自动回收。IOS并不支持自动垃圾回收,MAC OS X支持。
2 手工管理内存
NSStudent *stu = [[NSStudent alloc] init];[stu retain]; //引用计数加1[stu release]; //引用计数减1 [stu dealloc]; //释放
当对象的引用计数为0的时候就代表对象不再被引用,就可以回收内存,通过调用dealloc方法,回收内存。
dealloc方法继承自NSObject,默认释放对象的内存,如果当前对象内组合其他对象,就需要覆写dealloc方法,对组合的对象进行释放。
注意:当一个对象被销毁后,引用失效,对引用release或dealloc会出错。foundation框架中很多方法会使引用计数增加,比如NSMutable addObject。
3 对象引用和自动释放池
当一个对象需要延迟释放的时候,可以将对象放入自动释放池中,写法:
[ stu autorelease ];
自动释放池的创建:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];[pool drain]; //释放
4 @autoreleasepool块
@autoreleasepool { …… }
@autoreleasepool定义了自动释放内存的上下文,任在上下文创建的对象都是自动释放的,由ARC操作,在块结束的时候自动销毁对象。
5 copy和mutalbeCopy
copy和mutalbeCopy可以创建对象的副本,通过实现<NSCopying>协议实现复制。
NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:@"one",@"two",@"three",nil];NSMutableArray *arr2 ; arr2 = arr1; //简单赋值,指向同一个对象 arr2 = [arr1 mutableCopy]; //复制
6 实现NSCopying协议
可以实现NSCopying对自己的对象复制。实现NSCopying需要重写copyWithZone方法。
@interface Student : NSObject <NSCopying> -(id) copyWithZone:(NSZone*) zone{ Student *stu = [[Student allocWithZone:zone] init]; [stu setName:name]; return stu;}
7 设值和取值复制对象
-(void) setName:(NSString*)theName{ if(name != theName) { name = [theName copy]; }}//等于如下@property (nonatomic , copy) NSString *name;
0 0
- Object-c内存管理简介
- object c 内存管理
- Object c 内存管理
- object-c 内存管理
- object-c 内存管理
- Object C 内存管理
- Object C 内存管理
- Object-c 内存管理
- OBJECT-C 内存管理
- object-c内存管理
- Object-C内存管理
- Object-C内存管理
- object-c 内存管理
- Object C 内存管理
- Object-C内存管理
- Object-C内存管理
- Object-C内存管理
- Object-C-内存管理
- C++ 中的类型转换函数
- JSP本质
- Matlab画三维图笔记
- 黑马程序员 <java基础<集合知识点>>
- awk模式匹配
- Object-c内存管理简介
- UVa 1124 - Celebrity jeopardy
- scollView中实现缩放
- pulltorefresh自定义属性
- C-内存
- Python:mechanize模拟浏览器行为
- hiho第二周——Trie树
- 自动登录和记住密码
- HDU 4965 Fast Matrix Calculation