欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 02:36:52 责任编辑: Author_N1

 

关于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
--参考方法--
你过度释放掉了
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:36:52
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/12115/
本文WWW.DOC100.NET DOC100.NET版权所有。