读书人

关于ios内存管理的有关问题

发布时间: 2013-11-02 19:41:10 作者: rapoo

关于ios内存管理的问题
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
[解决办法]
你过度释放掉了

读书人网 >Iphone

热点推荐