Ios 如何更好地初始化图像:使用initWithData方法还是使用imageWithData?

Ios 如何更好地初始化图像:使用initWithData方法还是使用imageWithData?,ios,objective-c,cocoa,memory-management,uiimage,Ios,Objective C,Cocoa,Memory Management,Uiimage,我正在iOS中处理UIImage,发现有两种方法可以完成相同的工作 - (id)initWithData:(NSData *)data // (instance method) + (UIImage *)imageWithData:(NSData *)data // (class method) 现在,如果两者所做的工作是相同的,那么为什么要有两种方法,哪种方法是初始化图像的最佳方法 同样在类方法中,我们分配内存吗?他们做同样的事情,但内存管理略有不同。instance方

我正在iOS中处理UIImage,发现有两种方法可以完成相同的工作

- (id)initWithData:(NSData *)data          // (instance method)

+ (UIImage *)imageWithData:(NSData *)data  // (class method)
现在,如果两者所做的工作是相同的,那么为什么要有两种方法,哪种方法是初始化图像的最佳方法


同样在类方法中,我们分配内存吗?

他们做同样的事情,但内存管理略有不同。instance方法返回一个保留的实例,class方法返回一个自动释放的实例。这种差异是历史性的,在使用ARC时并不重要


class方法确实为实例分配了所需的内存,它只是在内部完成。

这两种方法的工作原理相同。但内存管理实例方法返回图像对象,它将保留,但通过使用类方法,对象内存将自动释放。
如果您在没有ARC的情况下开发应用程序,那么使用实例方法,您将负责释放内存

在ARC环境中,无需根据所选方法独立释放内存。

imageWithData只是:

+(UIImage *)imageWithData:(NSData *)data
{
    return [[UIImage alloc] initWithData:data];
}
这正是如果使用
-initWithData
所要做的,因此,这些方法在功能上被称为“便利构造函数”,它们没有任何不同,只是为您节省了一点输入


预arc实现还包括一个自动释放调用,但其思想是相同的,它只是一种简单的方法来创建和初始化一个对象,只需很少的键入。正如
[new]
[[alloc]init]

的同义词一样,您阅读过这两种方法的文档吗?对于ARC来说并不重要,但第一种方法返回一个保留的对象,第二种方法返回一个自动删除的对象。