Search This Blog

Wednesday, October 28, 2009

Memory performace

Loading Resource Lazily

比如:

- (void) LoadBigImag
{
if(myImage == nil){
myImage = [self loadSomeBigImageFromSource];
}
}

比如在viewWillAppear中,每次都要从网上图取一个图片
检测如果该图片已经存在,就不做读取操作,这样可以有效的节约内存!

Return carefully

比如:


-(NSArray *) showSomething
{
NSArray *myArray = [NSArray array];
NSArray *aArray = [[NSArray alloc] Init];
NSArray *bArray = [[NSArray alloc] Init];
if(myArray ...)
{
myArray = aArray;
[aArray release];
return myArray;
}
.....
[aArray release];
[bArray release];
return myArray;
}

在if中因为某种情景提前返回了,而此时bArray并没有释放。。所以这个时候是会出现Memory leak的。
所以一定要担心这样提前返回情况下出现的Memory leak。

尽量不要用autorelease 因为会在短期内造成大量的内存占用
不过如下可以用 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 解决这个问题

for (int i=0; i<999999; i++){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *string = @"Memory Test";
string = [string lowercaseString];
string = [string stringByAppendingFormat:@"%d"];
[pool release];
}


在方法 -(void) didReceiveMemoryWarning {} 中释放可能造成内存问题的危险资源

No comments:

Post a Comment