WEB开发网
开发学院手机开发iPhone 开发 iOS开发笔记:内存的使用 阅读

iOS开发笔记:内存的使用

 2010-10-13 02:08:00 来源:本站整理   
核心提示:iPhone 开发过程中,内存的使用至关重要,iOS开发笔记:内存的使用,不但要合理分配使用内存,还要注意内存泄露的问题,就把str的分配、释放放在for循环外面, 从而减少内存的分配、释放导致程序效率低下, 因为内存泄露会导致程序由于内存不足而崩溃,根据个人开发的经验来看

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++ )

1 2  下一页

Tags:iOS 开发 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接