OC 在循环体中调用[NSString stringWithFormat:@"%@",Object] 方法的内存问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC 在循环体中调用[NSString stringWithFormat:@"%@",Object] 方法的内存问题。相关的知识,希望对你有一定的参考价值。
Person *p=[[Person alloc]init];
for (int i = 0; i < 10000000; ++i)
// 1 @autoreleasepool
[NSString stringWithFormat:@"%@", p];
// 3
补充:如果在循环体中不添加自动释放池(1、3)就会导致内存无限增长,求大神指点,详细说明原因,谢谢。
感谢你的回答,其实我不明白的是一次循环结束后,[NSString stringWithFormat:@"%@", p];
创建的对象应该被销毁,第二次循环时候重新创建就不会导致内存无限增长。一次循环结束后对象应该没有强制指针指向,所以不会有内存占用。如图:
当程序执行到1的位置即为一次循环,此时局部变量array会被销毁,哪里那么array指向的内存空间也应该会被销毁。
如你所说:OC中字符串也是对象,它在内存中会一直创建,所以会无限增加内存?
循环中字符串创建完毕之后如果没有强指针指向是否会立即销毁,如果有那么是谁在指向?
Foundation框架系列-NSString
NSString
OC字符串与C语言字符串转换
NSString *str = @"Hello world ! !";
// OC字符串 --> C语言字符串
char *c = [str UTF8String];
// C字符串 --> OC语言字符串
char *c = "Hello world ! !";
NSString *str = [[NSString alloc] initWithUTF8String:c];
从文件中读取字符串
// 文件的绝对路径
NSString *str1 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/abc.txt" encoding:NSUTF8StringEncoding error:nil];
// 资源
NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/abc.txt"];
NSString *str2 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
获取字符串中指定内容的NSRange
NSString *str = @"Hello world";
// 获取字符串
NSRange range = [str rangeOfString:@"Hello"];
字符串的截取
NSString *str = @"HelloWorld";
// 指定index开始截取字符串(包含index)
NSString *str2 = [str substringFromIndex:2];
// 从字符串开始位置开始截取到index(不包含index)
NSString *str2 = [str substringToIndex:3];
// 从index开始包含index截取长度为length的字符串
NSString *str2 = [str substringWithRange:NSMakeRange(2, 2)];
// 从字符串中截取已知字符后面的全部内容
NSString *str = @"wechat://router";
NSRange chemeRange = [str rangeOfString: @"wechat://"];
NSString *str2 = [str substringFromIndex:chemeRange.location + chemeRange.length];
NSLog(@"\nstr2 = %@", str2); // 输出结果: router
以上是关于OC 在循环体中调用[NSString stringWithFormat:@"%@",Object] 方法的内存问题。的主要内容,如果未能解决你的问题,请参考以下文章