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变量会导致稍微减少的方法调用(自动释放),并且在循环中,它还会减少最大内存占用量.但是,在大多数情况下,这种降低的成本是可以忽略的.