内存泄漏问题?

时间:2011-11-14 15:16:03

标签: iphone memory-management

任何人都可以向我解释下面的图片,我该如何在这段代码中发布

enter image description here

为什么当某些人有另一个对象而你正在发布时会出现问题,比如

NSURL *url = [NSURL URLWithString:@"some_url_having_image_on_server"];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];      
UIImage *image = [UIImage imageWithData:data];

我如何发布和解释案例,不要传递给我链接,只是用自己的编程技巧解释,我真的想清除一些内存管理的概念,它们让我疯狂: - (

提前致谢

4 个答案:

答案 0 :(得分:3)

所有没有alloc的方法都是自动释放的。因此,[UIImage imagedWithData:]将在runloop结束时自动释放。

答案 1 :(得分:1)

使用alloccopy, copyMutable and new`的方法将返回保留计数为1的对象。 除非您明确保留,否则所有其他方法都应返回您不需要释放的自动释放对象。对于所有apple对象-c对象都是如此。

示例:

// need to be released:
NSString *temp = [[NSString alloc] init];
NSString *tempCopy = [temp copy];
NSString *newString [NSString new]; // which is the same are alloc, init.

[newstring release];
[tempCopy release];
[temp release];

自动释放的对象:

// You don not release:
NSString *temp = @"some string";
NSString *temp2 =[NSString string];

如果你真的想学习这些概念,那么你应该真正阅读这些概念:

答案 2 :(得分:0)

您是否尝试过:UIImage *img = [[UIImage alloc] initWithData:data];并且可以随时发布。

编辑:

此外,如果您尝试在没有alloc方法的情况下释放创建的对象,您的应用程序将崩溃,因为您没有分配,并且您没有对内存说“这个地方是我的!”,那么您的应用程序将自动释放您的对象。

答案 3 :(得分:0)

Objective-C中的内存管理只有4条基本规则:

1.如果您拥有它,请将其释放。

2.如果您不拥有它,请不要将其释放。

3.在类中删除dealloc以释放您拥有的字段。

4.永远不要直接调用dealloc([super dealloc]方法中对-dealloc的调用除外)

如上所示,您有一个代码 UIImage * image = [UIImage imageWithData:data]; 在这里你没有分配任何东西,所以你没有权利释放它。

以上2点是最重要的。