最近的 Stack Overflow 讨论 让我感到困惑。NSMutableArray 的 addObject:
原型是
- (void)addObject:(id)anObject
同时id
在objc.h中被定义为
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
当我把一个NSObject或它的子类加入到NSMutableArray中时,它的保留计数会被递增;而当我从NSMutableArray中移除它时,保留计数会被递减。这是否意味着如果将一个非NSObject或其子类的id类型添加到NSMutableArray中,它必须响应保留和释放消息?id的定义似乎并没有强制要求这样做。这是一个Objective-C指令,任何id类型都应该响应标准内存管理消息吗?
retain
和release
实际上是在 NSObject 协议中声明的,而不是在 NSObject 接口中声明的,因此从 NSObject 继承并不是必要的。 - Matt Wilding