Iphone NSObject为什么在NSObject和NSProxy中都声明了alloc,而在NSObject协议中却保留了alloc

Iphone NSObject为什么在NSObject和NSProxy中都声明了alloc,而在NSObject协议中却保留了alloc,iphone,ios,nsobject,nsproxy,Iphone,Ios,Nsobject,Nsproxy,retain在NSObject协议中声明 因此,NSObject类和NSProxy类实现了它 然而,NSProxy和NSObject类都有一个alloc 为什么不在NSObject协议中声明alloc 附带问题: NSObject协议还用于存储方法的类版本,其中实例方法位于NSObject类中。是否有任何东西可以阻止在NSObject协议中声明类和实例。为什么要把他们分开 @protocol NSCopying - (id)copyWithZone:(NSZone *)zone; //

retain在NSObject协议中声明

因此,NSObject类和NSProxy类实现了它

然而,NSProxy和NSObject类都有一个alloc

为什么不在NSObject协议中声明alloc

附带问题: NSObject协议还用于存储方法的类版本,其中实例方法位于NSObject类中。是否有任何东西可以阻止在NSObject协议中声明类和实例。为什么要把他们分开

@protocol NSCopying

- (id)copyWithZone:(NSZone *)zone;     //INSTANCE METHOD version of copyWithZone

@end
@interface NSObject <NSObject> {
    Class   isa;
}
...

+ (id)copyWithZone:(NSZone *)zone;     //CLASS METHOD version of copyWithZone
@协议复制
-(id)copyWithZone:(NSZone*)区//copyWithZone的实例方法版本
@结束
@接口对象{
isa类;
}
...
+(id)copyWithZone:(NSZone*)区//copyWithZone的类方法版本

干杯

我认为这取决于Objective-C的要求和实施的要求

为了创建一个对象,您需要一种分配它的方法。这是通过
alloc
方法完成的。因为这是使用objective-c所必需的,所以暗示所有根对象都应该实现它。然而,内存管理不必通过引用计数来完成。您可以使用垃圾收集来代替。因此,使用objective-c不需要使用
retain
方法。苹果的实现创建了
retain
方法作为内存管理的一种形式。他们希望确保所有对象都有它,所以他们将它添加到NSObject协议中。Cocoa中的所有根类都应该符合该协议,因此它们都应该有一个
retain
方法

类可以符合NSCopying协议,以表明可以复制该类的实例。通常情况下,您不想复制类,因此没有定义类方法。但是,有时您不知道对象是类还是实例,但调用
conformsToProtocol:
将返回相同的值。通过创建一个同名的类方法,您知道调用
copyWithZone:
是安全的,即使您不知道是否有实例或类