如何防止特定类被子类化?
我不知道该语言中的此类功能(例如 final
关键字)。但是 Apple 表示它已经对 AddressBookUI.framework(在 iOS 中)中的所有类都这样做了
出于教育目的,我怎样才能实现相同的功能,或者他们会怎么做?
来自 iOS7 Release Notes(Requires login) :
最佳答案
这是一种方法:从您的“最终”类中覆盖 allocWithZone:
(用 MyFinalClassName
代替您的实际类名),如下所示:
+ (id)allocWithZone:(struct _NSZone *)zone
{
if (self != [MyFinalClassName class]) {
NSAssert(nil, @"Subclassing MyFinalClassName not allowed.");
return nil;
}
return [super allocWithZone:zone];
}
这将防止不是 MyFinalClassName
成员的子类被 alloc
处理(因此也被 init
处理) ,因为 NSObject
的 allocWithZone:
最终必须被调用,并且通过拒绝从您的“最终”类调用 super
,您将防止这种情况发生.
关于objective-c - 防止类在 Objective-c 中被子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19194807/