iOS开发笔记:内存的使用
2010-10-13 02:08:00 来源:本站整理iPhone 开发过程中,内存的使用至关重要。不但要合理分配使用内存,还要注意内存泄露的问题, 因为内存泄露会导致程序由于内存不足而崩溃。根据个人开发的经验来看,在开发iPhone程序的过程中,关于内存的问题需要注意以下几点:
内存分配、释放成对出现
使用 alloc 分配的内存对象需要在用完后 调用release释放
注意copy,retain,assign操作符的区别
copy, retain操作符赋值的对象和alloc一样,需要release释放,否则会导致内存泄露
assign 操作符的含义是将对象指向另一对象, 两者指向的是同一内存对象,无需调用release释放
NSArray, NSDictionary, NSMutableArray, NSMutableDictionary等容器类, 在使用这些容器类的时候要注意, 在添加对象到这些类对象时,容器类会自动调用一次retain,比如
NSString* string = [[NSString alloc] initWithString:@”test string”]; // refCount = 1
NSArray* array = [NSArray array];
[array addObject:string]; // refCount = 2
[string release]; // refCount = 1
这种情况, 即便string已经调用release,但是在加入 array中时已经调用了一次retain,注意refCount的变化 简单介绍一下iPhone 或者说Objective C对对象的管理机制。 OC中采用一种引用计数refCount的方式来管理内存对象,当refCount等于0的时候就会释放对象所占的内存, 操作符alloc,copy, retain都会将refCount加1表示引用计数增加, 而调用release使 refCount自动减1, 当refCount=0时表示该对象已经没有被引用,可以将其释放, 之后该对象便不可用
连续重复分配内存的过程最好创建自己的自动释放池 NSAutoreleasePool,通常是在for、while等循环操作过程中,比如
for( int i=0; i < 100; i++ )
{
NSString* str = [[NSString alloc] initWithString:@”some string”];
// 针对str的操作
[str release];
}
在这种情况下,有2点需要注意,首先如果可能,就把str的分配、释放放在for循环外面, 从而减少内存的分配、释放导致程序效率低下,也利于内存回收,如上例应该为
NSString* str = [[NSString alloc] initWithString:@”some string”];
for( int i=0; i < 100; i++ )
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››iOS Safari支持浏览器内方向感应
- ››ios实现条形码扫描功能
- ››iOS开发知识:Core data操作含有初始数据的sqlite...
- ››iOS iPhone官方参考资料明细
- ››iOS开发基础:Modal View Controller的不同呈现方...
- ››iOS如何处理设备方向变化
- ››iOS开发基础之@property关键字
- ››iOS4下实现UIView动画结束后调用事件的新方法
- ››iOS开发代码:从文本文件中读取内容到字符串里
- ››iOS开发基础-UITableView
- ››iOS 开发者应该知道的 ARM 结构
更多精彩
赞助商链接