retain在NSObject协议中声明。
因此,NSObject类和NSProxy类实现了它。
然而,NSProxy和NSObject类都有一个分配。
为什么在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干杯
发布于 2011-08-24 08:20:58
我认为这是由Objective-C所要求的以及实现所要求的。
为了创建一个对象,你需要一种方法来分配它。这是由alloc方法完成的。由于这是使用objective-c所必需的,因此暗示所有根对象都应该实现它。但是,内存管理不必通过引用计数来完成。您可以改为使用垃圾收集。因此,retain方法不需要使用objective-c。苹果的实现创建了retain方法作为内存管理的一种形式。他们希望确保所有对象都可以使用它,因此他们将其添加到NSObject协议中。Cocoa中的所有根类都应该符合该协议,因此它们都应该有一个retain方法。
类可以符合NSCopying协议,以表明该类的实例可以复制。通常,您不想复制一个类,所以没有在那里定义一个类方法。然而,有时您不知道一个对象是一个类还是一个实例,但是调用conformsToProtocol:将返回相同的值。通过创建一个同名的类方法,您知道即使您不知道您是否有一个实例或类,调用copyWithZone:也是安全的。
https://stackoverflow.com/questions/7168884
复制相似问题