sdk是ios6.1,不开ARC。
#import <sys/sysctl.h>
#import <mach/mach.h>
-(id)init
{
self=[super init];
[self usedMemory];
[self addtitle:@"d"];
[self usedMemory];
return self;
}
-(void)addtitle:(NSString *)title
{
for (double i=0; i<200000;i++) {
// NSString *T2=[@" > " stringByAppendingString:title];
NSObject * T2=[[NSObject alloc]init];
[T2 release];
}
}
- (void )usedMemory
{
task_basic_info_data_t taskInfo;
mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
kern_return_t kernReturn = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&taskInfo,
&infoCount);
if (kernReturn != KERN_SUCCESS
) {
NSLog(@"Nofound");
}
NSLog(@"Memery%f", taskInfo.resident_size / 1024.0 / 1024.0);;
}
运行结果:
2013-09-14 18:56:24.240 menerytest[5913:c07] Memery16.789062
2013-09-14 18:56:24.281 menerytest[5913:c07] Memery17.128906
如果把 [T2 release]; 注释掉:
2013-09-14 19:05:41.786 menerytest[6476:c07] Memery16.890625
2013-09-14 19:05:41.804 menerytest[6476:c07] Memery20.320312
原本T2用得是 NSString *T2=[@" > " stringByAppendingString:title];
不release内存有可观的增长,release后的内存增长类似上面第一个结果,但是程序最后会crash掉。
为啥release掉还是有内存泄漏了呢?尽管十分微小。而且为什么“[@" > " stringByAppendingString:title]” release后会crash呢?
------解决方案--------------------
stringByAppendingString:title 返回的NSString已经是autorelease的了,你无需再手动去release
------解决方案--------------------
你过度释放掉了