Ios 如何更好地初始化图像:使用initWithData方法还是使用imageWithData?
我正在iOS中处理UIImage,发现有两种方法可以完成相同的工作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方
- (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来说并不重要,但第一种方法返回一个保留的对象,第二种方法返回一个自动删除的对象。