objective-c – 为什么要使用类方法构造函数而不是alloc / init?

前端之家收集整理的这篇文章主要介绍了objective-c – 为什么要使用类方法构造函数而不是alloc / init?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Objective C / Cocoa中的构造函数有两种选择:

1.类构造函数

Product *product = [Product productWithIdentifier:@"Chocolate"];
// Use product

2. Alloc / init构造函数

Product *product = [[Product alloc] initWithIdentifier:@"Chocolate"];
// Use product
[product release];

我所做的

>我倾向于使用类方法只是因为它看起来更干净而且你不需要发布.
>我看到很多alloc / init – 这样做有什么好处?

我的问题

>哪一个更好?或者只是品味问题?

对于上下文,Product类将具有以下内容

+(Product *)productWithIdentifier:(NSString *)identifier_ {
   return [[[[self class] alloc] initWithIdentifier:identifier] autorelease];
}

-(Product *)initWithIndentifier:(NSString *)identifier_ {
   self = [super init]
   if (self) {
       identifier = identifier_;
   }
   return self;
}

解决方法

如果您使用ARC,那么两者之间并没有那么大的区别.如果您不使用ARC,差异非常重要.

alloc / init组合为您提供了拥有引用.这意味着你必须在以后发布它. classnameWithFoo变量返回非拥有引用.你可能不会发布它.

这遵循通常的Cocoa命名约定.除了以alloc,copy,mutableCopy和new开头的方法之外,所有方法都返回非拥有(自动释放)实例.这些返回您必须释放的拥有引用.

使用哪一个主要是品味问题.但是,如果您需要可以快速处理的临时对象,则alloc变量会导致稍微减少的方法调用(自动释放),并且在循环中,它还会减少最大内存占用量.但是,在大多数情况下,这种降低的成本是可以忽略的.

猜你在找的C&C++相关文章