English 中文(简体)
聚苯胺
原标题:Memory Troubles with UIImagePicker

I m 建造一个有几节不同内容的镜头,全部都是高压图像。 它与我的客户网站链接,并改用“高设计”类型。

其中一台是摄像机或图书馆上载的图像,还有一张显示th网的图表。 简言之,当Im处理UIImagePickerControl照相版时,我被打低记忆。 如果我 around过那部分 app,我偶尔也以“静态:10(SIGBUS)”在 de中无休止地坠毁。

在低记忆警报方面,我对信的这方面看法控制员向我的数据管理单州、通过一系列附庸数据进行的游轮,并杀死了最大的一片,即与每一条目有关的图像。 因此:

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn t have a superview.
    [super didReceiveMemoryWarning];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Low Memory Warning"
                                                    message:@"Cleaning out events data"
                                                   delegate:nil
                                          cancelButtonTitle:@"All right then."
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];

    NSInteger spaceSaved;

    DataManager *data = [DataManager sharedDataManager];
    for (Event *event in data.eventList) {
        spaceSaved += [(NSData *)UIImagePNGRepresentation(event.image) length];
        event.image = nil;
        spaceSaved -= [(NSData *)UIImagePNGRepresentation(event.image) length];
    }

    NSString *titleString = [NSString stringWithFormat:@"Saved %d on event images", spaceSaved];

    for (WondrMark *mark in data.wondrMarks) {
        spaceSaved += [(NSData *)UIImagePNGRepresentation(mark.image) length];
        mark.image = nil;
        spaceSaved -= [(NSData *)UIImagePNGRepresentation(mark.image) length];
    }

    NSString *messageString = [NSString stringWithFormat:@"And total %d on event and mark images", spaceSaved];

    NSLog(@"%@ - %@", titleString, messageString);

    // Relinquish ownership any cached data, images, etc that aren t in use.
}

你们可以看到,我试图把一把记忆空间放开(穷人)。 我知道,它没有告诉我,UIImages本身的实际记忆足迹,但至少给我SOME的数字,因此,我可以看到正在发生。 (用黑手法打听我说,国家行车监督记录系统的信息太高,我会向另一个国际动工组织发火,但认为记录这种信息更有用。)

简言之,在一小时的图像部分中 around光后,我ll起照相机,使低记忆探测器像三、四倍的快速继承。 从我上次看到的那次国家后勤记录仪产出如下:

2010-05-27 08:55:02.659 EverWondr[7974:207] Saved 109591 on event images - And total 1419756 on event and mark images
wait_fences: failed to receive reply: 10004003
2010-05-27 08:55:08.759 EverWondr[7974:207] Saved 4 on event images - And total 392695 on event and mark images
2010-05-27 08:55:14.865 EverWondr[7974:207] Saved 4 on event images - And total 873419 on event and mark images
2010-05-27 08:55:14.969 EverWondr[7974:207] Saved 4 on event images - And total 4 on event and mark images
2010-05-27 08:55:15.064 EverWondr[7974:207] Saved 4 on event images - And total 4 on event and mark images

之后不久,我们就离开了我们的SIGBUS。 因此,局势恶化。 现在我的具体问题是:

我看到这种情况发生的时刻,是UIPickerView的摄像器关闭的时候。 我点击了 but子,看上去了照片,看上去了“立克”的动画,仪器显示我的记忆足迹,从大约10米布到大约25米布,坐到我方革热观察台,在那里,使用率再次降至10或11米。 如果我们在没有记忆警告的情况下通过这一机制,我们就会重新 gold金,但很可能我们不这样做。 我能做些什么,使这种代价不高?

第二,我配备了NSZombies。 我正确地理解,这实际上阻止了记忆的释放? 我把我的希望置于一种不公平的检验环境吗?

第三,能否从方案上利用我的记忆? 或者至少是使用UIImage物体? 我鼓励docs,看不出任何事情。

最佳回答

这些职能使你了解你的记忆使用和完全免费记忆。 我会看到,我有1个秘密时间,每秒钟,它就使用过标识和自由记忆空间(如果变化和大;0.5mb),它有助于我更好地看到:

#import "mach/mach.h"

vm_size_t usedMemory(void) {
    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
    return (kerr == KERN_SUCCESS) ? info.resident_size : 0;   // size in bytes
}

natural_t freeMemory(void) {
    mach_port_t           host_port = mach_host_self();
    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
    vm_size_t              pagesize;
    vm_statistics_data_t   vm_stat;

    host_page_size(host_port, &pagesize);
    (void) host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); 
    return vm_stat.free_count * pagesize;
}

EDIT1 - function class_getInstanceSize gives you the size of an object instance, but I ve never tried it and it probably doesn t dereference the ivars and rollup their usage. But maybe it can help you.

<><><><>>>>>> 这项职能使你拥有一个高档:

size_t sizeofUIImage(UIImage* image) {
    return CGImageGetBytesPerRow(image.CGImage) * CGImageGetHeight(image.CGImage);
}

http://www.ohchr.org。 这里是我1个保密的传时手法的一小部分,它有助于了解你在记忆问题之前如何做。 当然,免费的记忆因背景任务(Safari、邮件等)的不同而不同,你对以下任务没有很大的控制:

void logMemUsage(void) {
    // compute memory usage and log if different by >= 100k
    static long prevMemUsage = 0;
    long curMemUsage = usedMemory();
    long memUsageDiff = curMemUsage - prevMemUsage;

    if (memUsageDiff > 100000 || memUsageDiff < -100000) {
        prevMemUsage = curMemUsage;
        NSLog(@"Memory used %7.1f (%+5.0f), free %7.1f kb", 
            curMemUsage/1000.0f, memUsageDiff/1000.0f, freeMemory()/1000.0f);
    }
}

Credits: memory free/used functions derived from here and here.

问题回答

暂无回答




相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。

热门标签