2011-11-16 52 views
0

可能重复:
what is difference between alloc and allocWithZone:?Objective-C - alloc和allocFromZone之间的区别?

我读到提及使用allocWithZone的文章有助于通过使用一个内存位置更接近对象本身提高性能。这是真的?是否推荐使用allocWithZone而不是alloc? alloc和allocWithZone有什么区别?

proveded的例子是:

- (id)init 
{ 
    if (self = [super init]) 
    { 
     _myString = [[NSString allocWithZone:[self zone] init]]; 
    } 

    return self; 
} 

回答

3

首先ARC不允许调用对象zone。由于所有事情都以这种方式移动,似乎不足以使用allocWithZone

我知道使用allocWithZone符合NSCopying的一个很好的用法。

@protocol NSCopying 
- (id)copyWithZone:(NSZone *)zone; 
@end 

虽然你可以产品总数忽略了区域参数,我喜欢做这样的事情:

-(id)copyWithZone:(NSZone *)zone{ 
    SampleClass *copy = [[SampleClass allocWithZone:zone] init]; 
    copy->_myString = [_myString copyWithZone:zone]; 
    return copy; 
} 

比,我不认为还有更多比张贴previous question说其他。

2

直接从the horse's mouth

没有必要使用NSZone更多,它们是由现代Objective-C运行反正

忽略(这是从ARC发布说明,对于任何阅读过此文的人,Apple都会再次打破他们的文档结构。)

内存区域曾经有些有用,但Cocoa有漂亮的透射很高兴离开他们。 NSZone就像是一个退化的尾巴,ARC和libauto GC都将它切断。正如苹果工程师Bill Bumgarner在关于bryanmac软件的评论中指出的那样,它们在Cocoa中很笨拙,并不适用。