开发者

Objective C - NSString - Memory basics

开发者 https://www.devze.com 2023-03-14 12:54 出处:网络
I am trying to return an NSString that has bee开发者_如何学运维n initialized from a plist. If I comment out my release lines this code works. I would however like to release these objects from memory

I am trying to return an NSString that has bee开发者_如何学运维n initialized from a plist.

If I comment out my release lines this code works. I would however like to release these objects from memory as I no longer need them.

I thought that 'initWithString' would copy the contents of the target string into my new string meaning I could safely release the NSMutableArray. But it isn't. Why not?

+ (NSString*) genImage {

NSString *path = [[NSBundle mainBundle] pathForResource:
                  @"Images" ofType:@"plist"];
NSMutableArray *arrayOfImages = [[NSMutableArray alloc] initWithContentsOfFile:path];

NSLog(@"%d", [arrayOfImages count]);

int indexToLoad = 0;

NSString *res = [[NSString alloc] initWithString:[arrayOfImages objectAtIndex:indexToLoad] ];

[arrayOfImages release];
[path release];
return res;

}


You do not retain the return value of -[NSBundle pathForResource:ofType:] (the path variable), so there is no need to release it (and doing so will cause a crash, most likely). However, you should autorelease res, as you do retain that. You can change your last line to

return [res autorelease];
0

精彩评论

暂无评论...
验证码 换一张
取 消