首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

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

2013-11-02 
关于ios内存管理的问题sdk是ios6.1,不开ARC。#import sys/sysctl.h#import mach/mach.h-(id)init{self

关于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
[解决办法]
你过度释放掉了

热点排行